前言
因项目需要RPC,又要重启时隔一年多未使用的Dubbo,逛了逛官网,现在最新版本已经是2.7.4。由于Dubbo贡献给Apache之后,里面很多集成依赖(2.7.X)都发生了改变,
比如:dubbo-admin从项目独立出来,依赖包别称由com.alibaba.dubbo更变为org.apache.dubbo,特别苦恼的是在集成Spring,不通版本之间特别容易出现不兼容,并且网上教程大多停留在捐赠之前,就是说apache-dubbo的集成文档不是很丰富,本次集成搭建基于apache-dubbo的2.7.3版本。
搭建步骤
集成版本
- JAVA 1.8
- Dubbo 2.7.3
- Spring-Boot 2.1.6
- Dubbo-Spring-Boot 2.7.3
由于各个版本的依赖相差太大,如果使用的Dubbo版本低于2.7.0,可以参考如下:
| Dubbo Spring Boot | Dubbo | Spring Boot |
|---|---|---|
| 0.2.1.RELEASE | 2.6.5+ | 2.x |
| 0.1.2.RELEASE | 2.6.5+ | 1.x |
添加依赖
<!-- Spring Boot Starter-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.1.6.RELEASE</version>
</dependency>
<!-- Dubbo Spring Boot Starter -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
<!-- Dubbo 注册中心 -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-zookeeper</artifactId>
<version>2.7.3</version>
</dependency>
由于注册中心使用的是Zookeeper,该服务有三个方式:
- 企业提供
- 自行安装 可以参考kafka2.0系列之(3) 基于Centos7.6安装Zookeeper
- ZooKeeperServerMain 可以参考kafka2.0系列之(3) 基于Centos7.6安装Zookeeper
spring-boot-dubbo-dependency
项目结构
新建spring-boot-dubbo工程,采用Maven多模块进行管理,里面包括三个子模块:
- dubbo-api:对外服务接口
- dubbo-provider:提供者(接口的实现)
- dubbo-consumer:消费者
截图如下:

dubbo-api 模块
编写 DemoService 接口
/**
* 对外服务接口
* @author terry
* @since 14/10/2019
*/
public interface DemoService {
String sayHello(String name);
}
dubbo-provider 模块
-
实现
DemoService接口/** * @author terry * @since 14/10/2019 */ @Service(version = "${demo.service.version}") public class DemoServiceImpl implements DemoService { @Value("${dubbo.application.name}") private String serviceName; @Override public String sayHello(String name) { return String.format("[%s] : Hello, %s", serviceName, name); } } -
编写
Spring Boot引导程序/** * 提供者启动类 * @author terry * @since 14/10/2019 */ @EnableDubbo @SpringBootApplication public class ProviderApplication { public static void main(String[] args) { SpringApplication.run(ProviderApplication.class); } } -
配置
application.properties:spring.application.name=demoService-provider zookeeper.host = xx.xxx.xxx.xxx zookeeper.port = 2181 # Dubbo Application dubbo.scan.base-packages=cn.littleterry.provider.service.impl dubbo.application.name=${spring.application.name} demo.service.version=1.0.0 ## Dubbo Protocol dubbo.protocol.name=dubbo dubbo.protocol.port=-1 ## Dubbo Registry dubbo.registry.address=zookeeper://${zookeeper.host}:${zookeeper.port} dubbo.registry.file = ${user.home}/dubbo-cache/${spring.application.name}/dubbo.cache
dubbo-consumer 模块
-
通过
@Reference注入DemoService:/** * 消费者启动类 * @author terry * @since 14/10/2019 */ @SpringBootApplication public class ConsumerApplication { private final Logger logger = LoggerFactory.getLogger(getClass()); public static void main(String[] args) { SpringApplication.run(ConsumerApplication.class, args); } @Reference(version = "${demo.service.version}") private DemoService demoService; @Bean public ApplicationRunner runner() { return new ApplicationRunner() { @Override public void run(ApplicationArguments args) throws Exception { logger.info(demoService.sayHello("terry")); } }; } } -
配置
application.yml:spring: application: name: demoService-consumer demo: service: version: 1.0.0 zookeeper: host: xx.xxx.xxx.xxx port: 2181 dubbo: registry: protocol: zookeeper check: false address: zookeeper://${zookeeper.host}:${zookeeper.port} file: ${user.home}/dubbo-cache/${spring.application.name}/dubbo.cache
测试
-
启动提供服务方引导类
ProviderApplication

-
启动消费服务方引导类
ConsumerApplication

dubbo-admin
dubbo-admin是用一个可视化组件用来管理dubbo服务,组件实现:前端Vue 以及后端Spring-boot。
详情可以参考dubbo-admin 开发文档
源码
关注微信公众号:"牧羊人影视" 回复:10001
后记
何为Dubbo?
- 一款分布式服务框架
- 高性能和透明化的RPC远程服务调用方案
- SOA服务治理方案
Dubbo 架构原理

Spring—Boot—Dubbo集成中,服务流向?

Spring Cloud比Dubbo好吗?
我的理解:没有可比性,Dubbo只是一个RPC框架,在微服务领域中也是如此。
198

被折叠的 条评论
为什么被折叠?



