【Dubbo】SpringBoot 整合 Dubbo 示例

╰半夏微凉° 2022-11-19 11:24 294阅读 0赞

因为 Dubbo 的依赖中引入了 Spring 相关 Jar 包,所以使用 Dubbo 默认是基于 Spring 的,在前面的文章我们介绍了如何 Dubbo 进行远程通信和服务治理,那么,本篇我们就来看看如何使用 SpringBoot 整合。

创建三个单独模块,分别表示 api,provider,consumer。

在这里插入图片描述

1.dubbo-api

  1. /**
  2. *要暴露的服务
  3. */
  4. public interface ISayHelloService {
  5. String sayHello();
  6. }

2.dubbo-provider

1)引入依赖

  1. <dependencies>
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter</artifactId>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.springframework.boot</groupId>
  8. <artifactId>spring-boot-starter-test</artifactId>
  9. <scope>test</scope>
  10. <exclusions>
  11. <exclusion>
  12. <groupId>org.junit.vintage</groupId>
  13. <artifactId>junit-vintage-engine</artifactId>
  14. </exclusion>
  15. </exclusions>
  16. </dependency>
  17. <!-- 服务接口 -->
  18. <dependency>
  19. <groupId>com.xupt.yzh</groupId>
  20. <artifactId>dubbo-api</artifactId>
  21. <version>1.0-SNAPSHOT</version>
  22. </dependency>
  23. <!-- dubbo -->
  24. <dependency>
  25. <groupId>org.apache.dubbo</groupId>
  26. <artifactId>dubbo</artifactId>
  27. <version>2.7.2</version>
  28. </dependency>
  29. <!-- dubbo 自动装配相关内容-->
  30. <dependency>
  31. <groupId>org.apache.dubbo</groupId>
  32. <artifactId>dubbo-spring-boot-starter</artifactId>
  33. <version>2.7.1</version>
  34. </dependency>
  35. <!-- 注册中心Zk客户端 -->
  36. <dependency>
  37. <groupId>org.apache.curator</groupId>
  38. <artifactId>curator-framework</artifactId>
  39. <version>4.0.1</version>
  40. </dependency>
  41. <dependency>
  42. <groupId>org.apache.curator</groupId>
  43. <artifactId>curator-recipes</artifactId>
  44. <version>4.0.1</version>
  45. </dependency>
  46. </dependencies>

2)实现服务

  1. // 这个@Service是dubbo的提供的,表示暴露服务Bean
  2. // 也可以在@Service(loadbalance=)进行相关配置
  3. @Service
  4. public class SayHelloServiceImpl implements ISayHelloService {
  5. @Override
  6. public String sayHello() {
  7. return "Hello Dubbo...";
  8. }
  9. }

3)配置服务内容

  1. dubbo.scan.base-packages=com.xupt.yzh.dubboprovider
  2. dubbo.application.name=dubbo-springboot
  3. dubbo.registry.address=zookeeper://43.107.136.120:2181

几点注意:

  1. SpringBoot 默认采用dubbo协议与20880端口,所以 dubbo.protocol.name 与 dubbo.protocol.port 可以不显式配置
  2. dubbo.application.name 必须配置,其作用在于多节点提供同一服务时起标识作用

    • 在注册中心 zookeeper 中,服务节点的名称仍然是接口全类名,application.name 保存在临时节点的 url 中(通过&拼接)
    • 如果在 com…ISayHelloService 下有多个节点(代表多种服务实现),那么 applicaiton.name 可以在调用方的@Reference(application=“ ‘)进行指定
  3. dubbo.scan.base-packages 必须配置了才能扫描

4)启动服务

启动服务后可以在 zookeeper 中看相关服务是否已经注册

在这里插入图片描述

3.dubbo-client

1)引入依赖

这里同 provider,但一般还会引入 web-starter,因为消费端一般会包含 Controller,提供 web 访问

  1. <dependencies>
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-web</artifactId>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.springframework.boot</groupId>
  8. <artifactId>spring-boot-starter-test</artifactId>
  9. <scope>test</scope>
  10. <exclusions>
  11. <exclusion>
  12. <groupId>org.junit.vintage</groupId>
  13. <artifactId>junit-vintage-engine</artifactId>
  14. </exclusion>
  15. </exclusions>
  16. </dependency>
  17. <dependency>
  18. <groupId>com.xupt.yzh</groupId>
  19. <artifactId>dubbo-api</artifactId>
  20. <version>1.0-SNAPSHOT</version>
  21. </dependency>
  22. <dependency>
  23. <groupId>org.apache.dubbo</groupId>
  24. <artifactId>dubbo-spring-boot-starter</artifactId>
  25. <version>2.7.1</version>
  26. </dependency>
  27. <dependency>
  28. <groupId>org.apache.dubbo</groupId>
  29. <artifactId>dubbo</artifactId>
  30. <version>2.7.2</version>
  31. </dependency>
  32. <dependency>
  33. <groupId>org.apache.curator</groupId>
  34. <artifactId>curator-framework</artifactId>
  35. <version>4.0.1</version>
  36. </dependency>
  37. <dependency>
  38. <groupId>org.apache.curator</groupId>
  39. <artifactId>curator-recipes</artifactId>
  40. <version>4.0.1</version>
  41. </dependency>
  42. </dependencies>

2)远程调用服务

  1. @RestController
  2. public class DubboController {
  3. // Dubbo提供的注解,标识根据服务名获取相应服务Bean
  4. // 也可以在@Reference(loadbalance=)进行相关配置
  5. @Reference
  6. ISayHelloService sayHelloService;
  7. @GetMapping("/sayHello")
  8. public String sayHello() {
  9. // 调用服务提供方法
  10. return sayHelloService.sayHello();
  11. }
  12. }

3)配置服务内容

与provider相同

  1. dubbo.registry.address=zookeeper://43.107.136.120:2181
  2. dubbo.scan.base-packages=com.xupt.yzh.dubboclient
  3. dubbo.application.name=dubbo-springboot-client

4.启动服务

启动后可以在web端进行访问

在这里插入图片描述

本篇相关代码我放到 GitHub 上了,有需要参考的同学点击这里跳转…

发表评论

表情:
评论列表 (有 0 条评论,294人围观)

还没有评论,来说两句吧...

相关阅读

    相关 SpringBoot整合dubbo

    SpringBoot整合dubbo Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和Spring框

    相关 springboot整合dubbo

    本文主要通过代码示例来说明springboot和dubbo的整合方式 以下是核心代码示例,其他的资源整合配置和spring+Dubbo相同 声明下:dubbo网址在下面配

    相关 SpringBoot整合dubbo

    1.什么是Dubbo Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服