文章目录
- 微服务技术→Dubbo分布式服务治理框架-SpringBoot整合Dubbo(三)
微服务技术→Dubbo分布式服务治理框架-SpringBoot整合Dubbo(三)
1 目录结构
- itmayiedu-dubbo-parent
-- itmayiedu-dubbo-api
---- itmayiedu-dubbo-api-member
-- itmayiedu-dubbo-api-member-impl → 生产者
-- itmayiedu-dubbo-api-order-impl → 消费者
2 实现步骤
2.1 创建父模块 itmayiedu-dubbo-parent
2.1.1 添加Maven依赖信息
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.itmayiedu</groupId>
<artifactId>itmayiedu-dubbo-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<modules>
<module>itmayiedu-dubbo-api</module>
<module>itmayiedu-dubbo-api/itmayiedu-dubbo-api-member</module>
<module>itmayiedu-dubbo-api-member-impl</module>
<module>itmayiedu-dubbo-api-order-impl</module>
</modules>
<packaging>pom</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
</parent>
<!-- -统一编写版本的控制 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<curator-framework.version>4.0.1</curator-framework.version>
<zookeeper.version>3.4.13</zookeeper.version>
<dubbo.starter.version>0.2.0</dubbo.starter.version>
</properties>
<dependencies>
<!-- SpringBoot整合Web组件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- -如果在使用SpringBoot项目的时候 如果整合的依赖信息不需要写版本说明 springboot 已经帮你整合好了 -->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<!-- 阿里 巴巴写 springboot 整合dubbo组件 -->
<version>${dubbo.starter.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.2 创建API模块的父模块 itmayiedu-dubbo-api
2.3 创建API模块 itmayiedu-dubbo-api-member
2.3.1 创建接口类 IMemberService
package com.itmayiedu.api.member;
public interface IMemberService {
public String getUser();
}
2.4 创建API模块 itmayiedu-dubbo-api-member 的实现模块 itmayiedu-dubbo-api-member-impl
2.4.1 添加Maven依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>itmayiedu-dubbo-parent</artifactId>
<groupId>com.itmayiedu</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>itmayiedu-dubbo-api-member-impl</artifactId>
<dependencies>
<dependency>
<groupId>com.itmayiedu</groupId>
<artifactId>itmayiedu-dubbo-api-member</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
2.4.2 接口的实现类 MemberServiceImpl
package com.itmayiedu.api.member.impl;
import com.alibaba.dubbo.config.annotation.Service;
import com.itmayiedu.api.member.IMemberService;
import org.springframework.beans.factory.annotation.Value;
// 注意:@Service 注解引入为阿里巴巴注解
@Service
public class MemberServiceImpl implements IMemberService {
@Value("${dubbo.protocol.port}")
private String dubboPort;
@Override
public String getUser() {
return "订单服务调用会员服务接口, dubbo端口号为:→" + dubboPort;
}
}
2.4.3 添加application.yml
###服务器端口号
server:
port: 90
###dubbo 注册到到注册中心名称
dubbo:
application:
name: member
###采用协议协议方式和端口号
protocol:
###采用dubbo协议
name: dubbo
###发布dubbo端口号为20880
port: 20880
registry:
###dubbo 注册中心地址
address: zookeeper://127.0.0.1:2181
2.4.4 创建启动类
package com.itmayiedu.api;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
@EnableDubbo
@SpringBootApplication
public class AppMember {
public static void main(String[] args) {
SpringApplication.run(AppMember.class, args);
}
}
2.5 创建 itmayiedu-dubbo-api-order-impl模块
2.5.1 添加Maven依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>itmayiedu-dubbo-parent</artifactId>
<groupId>com.itmayiedu</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>itmayiedu-dubbo-api-member-impl</artifactId>
<dependencies>
<dependency>
<groupId>com.itmayiedu</groupId>
<artifactId>itmayiedu-dubbo-api-member</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
2.5.2 创建 OrderController
package com.itmayiedu.controller;
import com.alibaba.dubbo.config.annotation.Reference;
import com.itmayiedu.api.member.IMemberService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class OrderController {
// 使用该 @Reference调用dubbo接口
@Reference
private IMemberService iMemberService;
@RequestMapping("/orderToMember")
public String orderToMember() {
return iMemberService.getUser();
}
}
2.5.3 创建启动类
package com.itmayiedu;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
@EnableDubbo
@SpringBootApplication
public class AppOrder {
public static void main(String[] args) {
SpringApplication.run(AppOrder.class, args);
}
}
2.5.4 添加application.yml
server:
port: 8081
###dubbo 注册服务名称
dubbo:
application:
name: order
registry:
address: zookeeper://localhost:2181
#### 调用服务超时时间
consumer:
timeout: 5000
3 启动顺序
3.1 先启动Zookeeper注册中心
3.2 启动生产者模块(itmayiedu-dubbo-api-member-impl)
3.3 启动消费者模块(itmayiedu-dubbo-api-order-impl)
3.4 浏览器访问 http://127.0.0.1:8081/orderToMember
4 测试负载均衡效果
4.1 修改生产者模块(itmayiedu-dubbo-api-member-impl)的yml文件
server:
port: 8092
dubbo:
application:
name: member
protocol:
name: dubbo
port: 20882
registry:
address: zookeeper://127.0.0.1:2181
scan:
base-packages: com.itmayiedu.api.member.impl
注意 两个端口都有改变 server端口 和dubbo端口
4.2 再用新的配置文件启动一个生产者服务
4.3 浏览器访问 http://127.0.0.1:8081/orderToMember
4.4 再此访问
5 SpringCloud与Dubbo区别
为什么放弃Dubbo 使用SpringCloud?
相同点:SpringCloud 和Dubbo可以实现RPC远程调用框架,可以实现服务治理。
不同点:
SpringCloud是一套目前比较完善的微服务框架了,整合了分布式常用解决方案, 注册中心Eureka、负载均衡器Ribbon ,客户端调用工具Rest和Feign,分布式配置中心Config,服务保护Hystrix,网关Zuul Gateway ,服务链路Zipkin,消息总线Bus等。
从架构上分析
Dubbo内部实现功能没有SpringCloud强大,只是实现服务治理,缺少分布式配置中心、网关、链路、总线等,如果需要用到这些组件,需要整合其他框架。
从更新迭代速度分析
Dubbo目前更新速度没有SpringCloud快,到SpringCloud2.0后SpringCloud会越来完善和稳定。
从开发背景角度分析
Dubbo的开发背景是阿里巴巴, 在中国也推出了非常多的优秀的开源框架
但是在SpringCloud的背景是Spring家族,Spring是专注于企业级开源框架开发,在中国,或者在整个世界上Spring框架都应用的非常广泛。所有相对来说SpringCloud的背景比Dubbo更加强大。
最后总结下:
如果学习Dubbo的话,学习其他的分布式解决方案需要自己组装,反而如果学习SpringCloud,它已经把整个常用分布式解决都整合好了。