本文是Spring Cloud场景下使用Dubbo远程调用,以Nacos替换Zookeeper为注册中心的案例,如果单纯Dubbo融合Nacos作为注册中心,请参考 ☞官方文档;对Nacos不了解的可以参考之前☞Nacos文章;
1. Maven依赖
首先增加依赖版本统一管理
<properties>
<!-- 统一版本管理 -->
<spring-cloud.version>Hoxton.RELEASE</spring-cloud.version>
<alibaba-cloud.version>2.2.0.RELEASE</alibaba-cloud.version>
</properties>
<dependencyManagement>
<dependencies>
<!--spring cloud -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--spring cloud -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${alibaba-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
增加Dubbo、nacos依赖
<!--spring cloud dubbo -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>
<!-- spring cloud nacos discovery -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2. 提供服务方[provider]
yaml配置文件
spring:
application:
name: demo-provider-service
cloud:
nacos:
# 注册中心
discovery:
enabled: true
# 自己nacos地址
server-addr: localhost:8848
namespace: xxxx
# dubbo 配置
dubbo:
application.name: ${spring.application.name}
scan:
base-packages: com.demo.service
protocol:
name: dubbo
port: -1
registry:
# 挂载到 Spring Cloud 注册中心,不需要加nacos的namespace,不要使用 nacos://
address: spring-cloud://${spring.cloud.nacos.discovery.server-addr}
对应service接口上增加 @Service 注解,【org.apache.dubbo.config.annotation.Service 下的注解】
import org.apache.dubbo.config.annotation.Service;
@Service(version = "1.0.0", timeout = 10000)
public class DemoProviderServiceImpl implements DemoProviderService {
}
2. 消费服务方[consumer]
yaml配置文件
spring:
application:
name: demo-consumer-service
cloud:
nacos:
# 注册中心
discovery:
enabled: true
# 自己nacos地址
server-addr: localhost:8848
namespace: xxxx
dubbo:
registry:
# 挂载到 Spring Cloud 注册中心
address: spring-cloud://${spring.cloud.nacos.discovery.server-addr}
# 配置namespace
#parameters[namespace]: ${spring.cloud.nacos.discovery.namespace}
cloud:
subscribed-services: demo-provider-service
consumer:
check: false
loadbalance: "leastactive"
引入服务时,增加@Reference注解,[同样是org.apache.dubbo.config.annotation.Reference下面的]
import org.apache.dubbo.config.annotation.Reference;
@RestController
@RequestMapping(value = "test")
public class DemoConsumerController {
@Reference(version = "1.0.0", timeout = 10000, check = false)
private DemoProviderService demoProviderService;
}
3. 启动服务,查看Nacos注册情况
查看详情如下
这样就整合完成了,调用测试接口测试通过;