SpringCloudAlibaba整合Dubbo

文章目录

  • 构建服务接口
  • 构建服务接口提供方
  • 构建服务接口消费方

Spring Cloud是一套较为完整的架构方案,而Dubbo只是服务治理与RPC实现方案。Spring Cloud Alibaba中的Nacos来作为服务注册中心,并且在此之下可以如传统的Spring Cloud应用一样地使用Ribbon或Feign来实现服务消费,并提供了Spring Cloud Alibaba下额外支持的RPC方案:Dubbo

构建服务接口

public interface HelloService {String hello(String name);
}

构建服务接口提供方

(1)创建一个Spring Boot项目,在pom.xml中引入第一步中构建的API包以及Spring Cloud Alibaba对Nacos和Dubbo的依赖

<dependency><groupId>top.onethinggroupId><artifactId>product-apiartifactId><version>1.0-SNAPSHOTversion>dependency><dependency><groupId>com.alibaba.cloudgroupId><artifactId>spring-cloud-starter-alibaba-nacos-configartifactId><version>2.2.1.RELEASEversion>dependency><dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-webartifactId><version>2.2.5.RELEASEversion>dependency><dependency><groupId>com.alibaba.cloudgroupId><artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId><version>2.2.1.RELEASEversion>dependency><dependency><groupId>com.alibaba.cloudgroupId><artifactId>spring-cloud-starter-dubboartifactId><version>2.2.1.RELEASEversion>dependency><dependency><groupId>org.apache.httpcomponentsgroupId><artifactId>httpclientartifactId><version>4.5.4version><scope>compilescope>dependency>

spring-cloud-starter-dubbo基于spring-cloud-starter-commons开发的,org.apache.http.client.HttpClient类确实存在于旧版本的httpclient中,但是它使用内部的org.apache.http.impl.client.HttpClientBuilder类在新版本中却不存在。如果类路径上没有HttpClient,则HttpClientConfiguration自动配置将失败 HttpClientConfiguration的自动配置因对HttpClient的旧依赖性而失败,异常如下所示:

java.lang.IllegalStateException: Error processing condition on org.springframework.cloud.commons.httpclient.HttpClientConfiguration$ApacheHttpClientConfiguration.apacheHttpClientBuilder
Caused by: java.lang.ClassNotFoundException: org.apache.http.impl.client.HttpClientBuilder

(2)实现Dubbo接口

@Service
public class HelloServiceImpl implements HelloService {@Overridepublic String hello(String name) {return "hello " + name;}
}

注意:@Service注解不是Spring的,而是dubbo的,完全限定名为:org.apache.dubbo.config.annotation.Service

(3)配置Dubbo服务相关的信息
配置说明如下:

spring:application:name: dubbo-consumercloud:nacos:discovery:server-addr: www.onething.top:8848  # nacos服务注册中心的地址cluster-name: consumer-cluster  #集群名称namespace: b7ef9579-df75-41c2-8a95-e04aa03c273a  #命名空间config:server-addr: www.onething.top:8848  # nacos配置中心地址namespace: b7ef9579-df75-41c2-8a95-e04aa03c273afile-extension: yaml  #配置文件的后缀名refresh-enabled: true  #默认true:自动刷新
dubbo:protocol:    #Dubbo 服务暴露的协议配置,其中子属性 name 为协议名称,port 为协议端口( -1 表示自增端口,从 20880 开始)name: dubboport: -1  #dubbo协议缺省端口为20880,rmi协议缺省端口为1099,http和hessian协议缺省端口为80;如果没有配置port,则自动采用默认端口,如果配置为-1,则会分配一个没有被占用的端口。Dubbo 2.4.0+,分配的端口在协议缺省端口的基础上增长,确保端口段可控registry:#dubbo服务注册端口,注册中心服务器地址,如果地址没有端口缺省为9090,同一集群内的多个地址用逗号分隔,如:ip:port,ip:port#其中前缀spring-cloud说明:挂载到 Spring Cloud注册中心address: spring-cloud://www.onething.top:8848#check: false  #关闭注册中心是否启动的相关检查,false表示不检查注册中心是否启动,就不会报错cloud:subscribed-services: dubbo-productconsumer:check: false  #关闭订阅服务是否启动的检查【检查时,没有服务提供者会报错】

dubbo.scan.base-packages: 指定 Dubbo 服务实现类的扫描基准包
dubbo.protocol: Dubbo 服务暴露的协议配置,其中子属性 name 为协议名称,port 为协议端口( -1 表示自增端口,从 20880 开始)
dubbo.registry: Dubbo 服务注册中心配置,其中子属性 address 的值 “spring-cloud://localhost”,说明挂载到 Spring Cloud 注册中心

注意:如果使用Spring Boot 2.1及更高版本时候,需要增加配置spring.main.allow-bean-definition-overriding=true
(4)创建应用主类

@EnableDiscoveryClient【此注解可以省略】
@SpringBootApplication
public class DubboServerApplication {public static void main(String[] args) {SpringApplication.run(DubboServerApplication.class, args);}
}

构建服务接口消费方

(1)创建一个Spring Boot项目,在pom.xml中引入第一步中构建的API包以及Spring Cloud Alibaba对Nacos和Dubbo的依赖,具体内容与服务提供方一致

 <dependencies><dependency><groupId>top.onethinggroupId><artifactId>product-apiartifactId><version>1.0-SNAPSHOTversion>dependency><dependency><groupId>com.alibaba.cloudgroupId><artifactId>spring-cloud-starter-alibaba-nacos-configartifactId><version>2.2.1.RELEASEversion>dependency><dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-webartifactId><version>2.2.5.RELEASEversion>dependency><dependency><groupId>com.alibaba.cloudgroupId><artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId><version>2.2.1.RELEASEversion>dependency><dependency><groupId>com.alibaba.cloudgroupId><artifactId>spring-cloud-starter-dubboartifactId><version>2.2.1.RELEASEversion>dependency>
dependencies>

(2)配置Dubbo服务相关的信息

spring:application:name: dubbo-consumercloud:nacos:discovery:server-addr: www.onething.top:8848  # nacos服务注册中心的地址cluster-name: consumer-cluster  #集群名称namespace: b7ef9579-df75-41c2-8a95-e04aa03c273a  #命名空间config:server-addr: www.onething.top:8848  # nacos配置中心地址namespace: b7ef9579-df75-41c2-8a95-e04aa03c273agroup: test-groupfile-extension: yaml  #配置文件的后缀名
dubbo:protocol:    #Dubbo 服务暴露的协议配置,其中子属性 name 为协议名称,port 为协议端口( -1 表示自增端口,从 20880 开始)name: dubboport: -1  #dubbo协议缺省端口为20880,rmi协议缺省端口为1099,http和hessian协议缺省端口为80;如果没有配置port,则自动采用默认端口,如果配置为-1,则会分配一个没有被占用的端口。Dubbo 2.4.0+,分配的端口在协议缺省端口的基础上增长,确保端口段可控registry:#其中前缀spring-cloud说明:挂载到 Spring Cloud注册中心address: spring-cloud://www.onething.top:8848  #dubbo服务注册端口,注册中心服务器地址,如果地址没有端口缺省为9090,同一集群内的多个地址用逗号分隔,如:ip:port,ip:portcloud:subscribed-services: dubbo-product

(3)创建应用主类,并实现一个接口,在这个接口中调用Dubbo服务

@EnableDiscoveryClient
@SpringBootApplication
@RestController
public class DubboClientApplication {@ReferenceHelloService helloService;public static void main(String[] args) {SpringApplication.run(DubboClientApplication.class, args);}@GetMapping("/test")public String test() {return helloService.hello("didispace.com");}
}

注意:这里的@Reference注解是org.apache.dubbo.config.annotation.Reference


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部