21 06 2020

前言

本文主要通过代码示例实现 Spring Boot 集成 Apache Dubbo

Spring Boot 集成 Apache Dubbo

服务提供者开发

  • 创建 maven 工程 spring-boot-provider,添加两个 module:spring-boot-sample-api 和 spring-boot-sample-provider。
  • 在 spring-boot-sample-api 模块中定义一个接口,并且通过 mvn install 后上传到 maven 私服。

为了方便,此处直接用了阿里云效的 maven 仓库工具,地址:https://packages.aliyun.com/maven

  1. public interface IHelloService {
  2. String sayHello(String name);
  3. }
  • 在 spring-boot-sample-provider 模块中引入如下依赖,此处用了dubbo 2.7.8 版本:
  1. <properties>
  2. <java.version>1.8</java.version>
  3. <dubbo.version>2.7.8</dubbo.version>
  4. </properties>
  5. <dependencies>
  6. <dependency>
  7. <groupId>org.springframework.boot</groupId>
  8. <artifactId>spring-boot-starter</artifactId>
  9. </dependency>
  10. <!-- dubbo -->
  11. <dependency>
  12. <groupId>org.apache.dubbo</groupId>
  13. <artifactId>dubbo-spring-boot-starter</artifactId>
  14. <version>${dubbo.version}</version>
  15. </dependency>
  16. <dependency>
  17. <groupId>cn.zwqh</groupId>
  18. <artifactId>spring-boot-sample-api</artifactId>
  19. <version>0.0.1-SNAPSHOT</version>
  20. </dependency>
  21. </dependencies>
  • 在 application.properties 文件中添加 Dubbo 服务的信息配置。
  1. spring.application.name=spring-boot-dubbo-demo
  2. # dubbo
  3. # 服务提供方应用信息,用于计算依赖关系
  4. dubbo.application.name=spring-boot-provider
  5. # 默认采用 dubbo 协议
  6. dubbo.protocol.name=dubbo
  7. # 在20880端口暴露服务
  8. dubbo.protocol.port=20880
  9. #服务注册中新地址,N/A表示不注册
  10. dubbo.registry.address=N/A
  • 在 spring-boot-sample-provider 中实现 IHelloService,并使用 @DubboService 注解发布服务。
  1. @DubboService
  2. public class HelloServiceImpl implements IHelloService {
  3. @Value("${dubbo.application.name}")
  4. private String serviceName;
  5. @Override
  6. public String sayHello(String name) {
  7. return String.format("[%s]:hello,%s", serviceName, name);
  8. }
  9. }
  1. @DubboComponentScan
  2. @SpringBootApplication
  3. public class SpringBootSampleProviderApplication {
  4. public static void main(String[] args) {
  5. SpringApplication.run(SpringBootSampleProviderApplication.class, args);
  6. }
  7. }

服务调用者开发

  • 创建一个 Spring Boot 项目 spring-boot-consumer,添加依赖。
  1. <properties>
  2. <java.version>1.8</java.version>
  3. <dubbo.version>2.7.8</dubbo.version>
  4. </properties>
  5. <dependencies>
  6. <dependency>
  7. <groupId>org.springframework.boot</groupId>
  8. <artifactId>spring-boot-starter</artifactId>
  9. </dependency>
  10. <!-- dubbo -->
  11. <dependency>
  12. <groupId>org.apache.dubbo</groupId>
  13. <artifactId>dubbo-spring-boot-starter</artifactId>
  14. <version>${dubbo.version}</version>
  15. </dependency>
  16. <dependency>
  17. <groupId>cn.zwqh</groupId>
  18. <artifactId>spring-boot-sample-api</artifactId>
  19. <version>0.0.1-SNAPSHOT</version>
  20. </dependency>
  21. </dependencies>
  • 在application.properties 中配置项目名称。
  1. dubbo.application.name=spring-boot-consumer
  • 在 Spring Boot 启动类中,使用 Dubbo 提供的 @DubboReference 注解来获得一个远程代理对象。
  1. @SpringBootApplication
  2. public class SpringBootConsumerApplication {
  3. @DubboReference(url = "dubbo://192.168.31.185:20880/cn.zwqh.springboot.api.IHelloService")
  4. private IHelloService helloService;
  5. public static void main(String[] args) {
  6. SpringApplication.run(SpringBootConsumerApplication.class, args);
  7. }
  8. @Bean
  9. public ApplicationRunner runner() {
  10. return args -> System.out.println(helloService.sayHello("朝雾轻寒"));
  11. }
  12. }

至此一个简单 Dubbo Demo 已经完成了,启动后执行效果:

  1. [spring-boot-provider]:hello,朝雾轻寒

示例代码

github

码云

延伸阅读
  1. Spring Boot 2.X(三):使用 Spring MVC + MyBatis + Thymeleaf 开发 web 应用
  2. Spring Boot 2.X(十八):集成 Spring Security-登录认证和权限控制
  3. Spring Boot 2.X(十一):全局异常处理
  4. Spring Boot 2.X(六):Spring Boot 集成 Redis
  5. Spring Boot 2.X(一):入门篇
发表评论