依赖配置
- SpringCloud 2021.0.1
- Dubbo 3.0.6
- 文章中使用的项目链接: RuoYi-Cloud-Plus
引入依赖
<!-- SpringCloud 微服务 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2021.0.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Apache Dubbo 配置 -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>3.0.6</version>
</dependency>
这里解释一下为什么不用 Spring-Cloud-Alibaba 的 Dubbo 依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
<version>2021.1</version>
</dependency>
这个依赖主要是负责处理兼容 Feign 的 Dubbo 代理配置 通过 Feign 做服务发现
项目中 如果统一使用 Dubbo 则不需要使用这个依赖 在后续版本 官方也宣布此模块从主分支移除
况且 Dubbo 3.0 已经支持 基于应用服务的发现机制 故完全没必要与 Feign 做兼容处理
配置服务
<!-- SpringCloud Alibaba Nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- SpringCloud Alibaba Nacos Config -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>
配置Nacos bootstrap.yml
server:
port: 9201
# Spring
spring:
main:
# 此配置禁止放入 nacos 优先级不够
allow-circular-references: true
application:
# 应用名称
name: ruoyi-system
--- # nacos 配置
spring:
cloud:
nacos:
# nacos 服务地址
server-addr: localhost:8848
discovery:
# 注册组
group: DEFAULT_GROUP
config:
# 配置组
group: DEFAULT_GROUP
在Nacos放置服务对应的配置 ruoyi-system.yml
Nacos默认读取与服务名同名的配置文件
dubbo:
application:
logger: slf4j
# 元数据中心 local 本地 remote 远程 这里使用远程便于其他服务获取
# 注意 这里不能使用 本地 local 会读取不到元数据
metadataType: remote
# 可选值 interface、instance、all,默认是 all,即接口级地址、应用级地址都注册
register-mode: instance
service-discovery:
# FORCE_INTERFACE,只消费接口级地址,如无地址则报错,单订阅 2.x 地址
# APPLICATION_FIRST,智能决策接口级/应用级地址,双订阅
# FORCE_APPLICATION,只消费应用级地址,如无地址则报错,单订阅 3.x 地址
migration: FORCE_APPLICATION
protocol:
# 设置为 tri 即可使用 Triple 3.0 新协议
# 性能对比 dubbo 协议并没有提升 但基于 http2 用于多语言异构等 http 交互场景
# 使用 dubbo 协议通信
name: dubbo
# dubbo 协议端口(-1表示自增端口,从20880开始)
port: -1
# 注册中心配置
registry:
address: nacos://localhost:8848
# 这里注意 由于 3.X 的 bug 导致注册组不生效
group: DUBBO_GROUP
# 由于 group 不生效 这里使用 namespace 将 dubbo 服务与 cloud 服务隔离
# 否则会导致正常请求路由到 dubbo 服务报错
parameters:
# 注意 这里要在 nacos 创建名为 dubbo 的 namespace 环境
namespace: dubbo
# 消费者相关配置
consumer:
# 支持校验注解
validation: true
# 超时时间
timeout: 3000
# 初始化检查
check: false
scan:
# 接口实现类扫描
base-packages: com.ruoyi.**.dubbo
编写业务接口
编写提供者接口实现
注意 注解为@DubboService
标注为dubbo的service服务实现
编写消费者 消费接口
启动服务 观察现象
Dubbo 2.X 是以接口为注册发现
Dubbo 3.X 是以服务为注册发现
启动完成后 进入Nacos 观察
cloud 服务
dubbo 服务
这里可以看到 服务的元数据 已经指向了 元数据中心的地址
这样我们再去元数据中心找到
revision
标注的元数据配置
这里是以应用为单位存储的元数据配置信息
里面包括一些服务的配置 与 服务提供的接口等
测试Dubbo服务调用