springCloud整合Dubbo
前言
项目之间的服务的调用之前是用的openFeign,openFeign与dubbo相比的话从传输速度等方面来讲明显是dubbo更好一些,所以也就是为什么要舍弃openFeign转用dubbo的原因,本文只讲整合dubbo中遇到的坑以及一些必须的配置,远程调用实例建议参考其他文章。
一、引入jar包
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.2</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.8</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
<version>2.6.7</version>
</dependency>
二、dubbo在application.yml中的配置
1.注意格式
spring:
application:
name: dubbo-test
dubbo:
protocol:
port: -1 #-1代表自增,也可自行定义端口
name: dubbo #协议名称
scan: #服务扫描基础包路径
base-packages: src/main/java/com/controller/test
registry:
address: nacos://localhost:8848 #nacos注册地址
cloud:
subscribed-services: dubbo-provider #远程调用实现类所在的应用
consumer:
check: false #关闭订阅服务是否启动的检查
2.需要在启动类上加上@EnableDubbo
3.需要在实现类上加上@Service且注意不要导错包,我们需要引入的是alibaba的相关包
4.在控制层注入bean进行方法的调用的时候需要使用的是@Reference注解
以上就是配置及一些要注意的点,下面就讲些遇到的坑及解决方案
在使用消费端去调用服务端时,使用@Reference注解注入的bean居然是空的,导致出现了空指针的情况,如下
以上情况有两个解决办法
1.要先启动服务端,再启动客户端就不会出现以上情况,但是实际的微服务项目中不可能是只有两个服务之间的调用,实际调用可能错综复杂,显然这种解决办法不太实用,这就要用到第二种方法了
2.需要在配置文件中加个配置,如下
dubbo:
consumer:
check: false #关闭订阅服务是否启动的检查
第二个坑就是启动服务的时候会出现
java.lang.IllegalStateException: No such any registry to export service in provider 192.168.1.53 use dubbo version 2.6.2, Please add <dubbo:registry address=“…” /> to your spring config. If you want unregister, please set <dubbo:service registry=“N/A” /> 的问题,可能出现这个错误的情况有很多,但是我的是因为yml格式不对,导致配置不生效的情况,需要注意的是dubbo并不是跟在spring下的,正确的格式应该是同级的,如下
不同框架配置情况不同,根据自身而定