springCloudAlibaba集成Dubbo

发布时间:2023-01-16 19:04:36 作者:yexindonglai@163.com 阅读(788)

简介

使用springboot版本 : 2.2.5
cloud版本 :2.2.1.RELEASE

1、父工程

创建一个 名为springCloudAlibaba-dubbo父工程,pom.xml默认就好,然后除了pom.xml文件之外全都删掉,

2、接口模块

先创建一个子模块,继承父工程

  1. <parent>
  2. <artifactId>springCloudAlibaba-dubbo</artifactId>
  3. <groupId>org.example</groupId>
  4. <version>1.0-SNAPSHOT</version>
  5. </parent>

然后添加一个接口

接口代码如下:

  1. public interface HelloService {
  2. String hello(String name);
  3. }

3、生产者

pom.xml文件继承父工程

  1. <parent>
  2. <artifactId>springCloudAlibaba-dubbo</artifactId>
  3. <groupId>org.example</groupId>
  4. <version>1.0-SNAPSHOT</version>
  5. </parent>

pom.xml文件添加以下依赖

  1. <!--引入公共模块-->
  2. <dependency>
  3. <groupId>org.example</groupId>
  4. <artifactId>common</artifactId>
  5. <version>1.0-SNAPSHOT</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>com.alibaba.cloud</groupId>
  9. <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  10. <version>2.2.1.RELEASE</version>
  11. </dependency>
  12. <dependency>
  13. <groupId>org.springframework.boot</groupId>
  14. <artifactId>spring-boot-starter-web</artifactId>
  15. <version>2.2.5.RELEASE</version>
  16. </dependency>
  17. <dependency>
  18. <groupId>com.alibaba.cloud</groupId>
  19. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  20. <version>2.2.1.RELEASE</version>
  21. </dependency>
  22. <dependency>
  23. <groupId>com.alibaba.cloud</groupId>
  24. <artifactId>spring-cloud-starter-dubbo</artifactId>
  25. <version>2.2.1.RELEASE</version>
  26. </dependency>
  27. <!--Dubbo Spring Cloud基于Spring Cloud Commons开发的,org.apache.http.client.HttpClient类确实存在于旧版本的httpclient中,
  28. 但是它使用内部的org.apache.http.impl.client.HttpClientBuilder类在新版本中却不存在-->
  29. <dependency>
  30. <groupId>org.apache.httpcomponents</groupId>
  31. <artifactId>httpclient</artifactId>
  32. <version>4.5.4</version>
  33. <scope>compile</scope>
  34. </dependency>

application.yml 配置文件

  1. com:
  2. nacos_address: 10.114.57.125:8848
  3. spring:
  4. application:
  5. name: dubbo-product
  6. cloud:
  7. nacos:
  8. discovery:
  9. server-addr: ${com.nacos_address} # nacos服务注册中心的地址
  10. cluster-name: consumer-cluster #集群名称
  11. namespace: b7ef9579-df75-41c2-8a95-e04aa03c273a #命名空间
  12. config:
  13. server-addr: ${com.nacos_address} # nacos配置中心地址
  14. namespace: b7ef9579-df75-41c2-8a95-e04aa03c273a
  15. file-extension: yaml #配置文件的后缀名
  16. refresh-enabled: true #默认true:自动刷新
  17. dubbo:
  18. scan:
  19. base-packages: org.example.service # 扫描带有 org.apache.dubbo.config.annotation.@Service 注解的实现类
  20. protocol: #Dubbo 服务暴露的协议配置,其中子属性 name 为协议名称,port 为协议端口( -1 表示自增端口,从 20880 开始)
  21. name: dubbo
  22. port: -1 #dubbo协议缺省端口为20880,rmi协议缺省端口为1099,http和hessian协议缺省端口为80;如果没有配置port,则自动采用默认端口,如果配置为-1,则会分配一个没有被占用的端口。Dubbo 2.4.0+,分配的端口在协议缺省端口的基础上增长,确保端口段可控
  23. registry:
  24. #dubbo服务注册端口,注册中心服务器地址,如果地址没有端口缺省为9090,同一集群内的多个地址用逗号分隔,如:ip:port,ip:port
  25. #其中前缀spring-cloud说明:挂载到 Spring Cloud注册中心
  26. address: spring-cloud://10.114.57.125:8848
  27. #check: false #关闭注册中心是否启动的相关检查,false表示不检查注册中心是否启动,就不会报错
  28. cloud:
  29. subscribed-services: dubbo-product
  30. consumer:
  31. check: false #关闭订阅服务是否启动的检查【检查时,没有服务提供者会报错】

启动类 DubboServerApplication.java

  1. package org.example;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
  5. @EnableDiscoveryClient //【此注解可以省略】
  6. @SpringBootApplication
  7. public class DubboServerApplication {
  8. public static void main(String[] args) {
  9. SpringApplication.run(DubboServerApplication.class, args);
  10. }
  11. }

实现类 HelloServiceImpl.java

  1. package org.example.service;
  2. import org.apache.dubbo.config.annotation.Service;
  3. @Service(version = "1.0.0")
  4. public class HelloServiceImpl implements HelloService {
  5. @Override
  6. public String hello(String name) {
  7. String s = "hello " + name;
  8. System.out.println("调用了:"+s);
  9. return s;
  10. }
  11. }

生产者模块目录全览

4、消费者

pom.xml文件继承父工程

  1. <parent>
  2. <artifactId>springCloudAlibaba-dubbo</artifactId>
  3. <groupId>org.example</groupId>
  4. <version>1.0-SNAPSHOT</version>
  5. </parent>

pom.xml加入以下依赖

  1. <dependency>
  2. <groupId>junit</groupId>
  3. <artifactId>junit</artifactId>
  4. <version>3.8.1</version>
  5. <scope>test</scope>
  6. </dependency>
  7. <dependency>
  8. <groupId>org.example</groupId>
  9. <artifactId>common</artifactId>
  10. <version>1.0-SNAPSHOT</version>
  11. </dependency>
  12. <dependency>
  13. <groupId>com.alibaba.cloud</groupId>
  14. <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  15. <version>2.2.1.RELEASE</version>
  16. </dependency>
  17. <dependency>
  18. <groupId>org.springframework.boot</groupId>
  19. <artifactId>spring-boot-starter-web</artifactId>
  20. <version>2.2.5.RELEASE</version>
  21. </dependency>
  22. <dependency>
  23. <groupId>com.alibaba.cloud</groupId>
  24. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  25. <version>2.2.1.RELEASE</version>
  26. </dependency>
  27. <dependency>
  28. <groupId>com.alibaba.cloud</groupId>
  29. <artifactId>spring-cloud-starter-dubbo</artifactId>
  30. <version>2.2.1.RELEASE</version>
  31. </dependency>
  32. <!--Dubbo Spring Cloud基于Spring Cloud Commons开发的,org.apache.http.client.HttpClient类确实存在于旧版本的httpclient中,
  33. 但是它使用内部的org.apache.http.impl.client.HttpClientBuilder类在新版本中却不存在-->
  34. <dependency>
  35. <groupId>org.apache.httpcomponents</groupId>
  36. <artifactId>httpclient</artifactId>
  37. <version>4.5.4</version>
  38. <scope>compile</scope>
  39. </dependency>

application.yml 配置文件内容

  1. com:
  2. nacos_address: 10.114.57.125:8848
  3. server:
  4. port: 8081
  5. spring:
  6. application:
  7. name: dubbo-consumer
  8. cloud:
  9. nacos:
  10. discovery:
  11. server-addr: ${com.nacos_address} # nacos服务注册中心的地址
  12. cluster-name: consumer-cluster #集群名称
  13. namespace: b7ef9579-df75-41c2-8a95-e04aa03c273a #命名空间
  14. config:
  15. server-addr: ${com.nacos_address} # nacos配置中心地址
  16. namespace: b7ef9579-df75-41c2-8a95-e04aa03c273a
  17. group: test-group
  18. file-extension: yaml #配置文件的后缀名
  19. dubbo:
  20. protocol: #Dubbo 服务暴露的协议配置,其中子属性 name 为协议名称,port 为协议端口( -1 表示自增端口,从 20880 开始)
  21. name: dubbo
  22. port: -1 #dubbo协议缺省端口为20880,rmi协议缺省端口为1099,http和hessian协议缺省端口为80;如果没有配置port,则自动采用默认端口,如果配置为-1,则会分配一个没有被占用的端口。Dubbo 2.4.0+,分配的端口在协议缺省端口的基础上增长,确保端口段可控
  23. registry:
  24. #其中前缀spring-cloud说明:挂载到 Spring Cloud注册中心
  25. address: spring-cloud://${com.nacos_address} #dubbo服务注册端口,注册中心服务器地址,如果地址没有端口缺省为9090,同一集群内的多个地址用逗号分隔,如:ip:port,ip:port
  26. cloud:
  27. subscribed-services: dubbo-product

启动类和controller层 ConsumerApplication.java

  1. package org.example;
  2. import org.apache.dubbo.config.annotation.Reference;
  3. import org.example.service.HelloService;
  4. import org.springframework.boot.SpringApplication;
  5. import org.springframework.boot.autoconfigure.SpringBootApplication;
  6. import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
  7. import org.springframework.web.bind.annotation.GetMapping;
  8. import org.springframework.web.bind.annotation.RestController;
  9. @EnableDiscoveryClient
  10. @SpringBootApplication
  11. @RestController
  12. public class ConsumerApplication {
  13. // 版本号必须和 @Service注解上的 version一致
  14. @Reference(version = "1.0.0",check = false)
  15. private HelloService helloService;
  16. public static void main(String[] args) {
  17. SpringApplication.run(ConsumerApplication.class, args);
  18. }
  19. @GetMapping("/test")
  20. public String test() {
  21. return helloService.hello("didispace.com");
  22. }
  23. }

消费者模块全览

5、启动

注意:如果 @Reference注解没有加上 check = false配置,就必须先启动生产者,然后在启动消费者,否则会报错!

启动成功后如下图

在浏览器访问消费者接口 http://localhost:8081/test,可以正常访问

关键字Dubbo