首先呢,这个项目分为provider提供者和consumer消费者,使用的版本是dubbo3.0.7,nacos是2.0.4。(注意:要使用dubbo3,nacos的版本必须在2.0.0以上)
Provider提供者
pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.example</groupId>
<artifactId>interfaces</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>3.0.7</version>
</dependency
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>2.0.4</version>
</dependency>
</dependencies>
application.properties
需要注意的是,Dubbo3 默认采用 “应用级服务发现 + 接口级服务发现” 的双注册模式,因此会发现应用级服务(应用名)和接口级服务(接口名)同时出现在 Nacos 控制台,可以通过配置 dubbo.registry.register-mode=instance/interface/all 来改变注册行为。
# 应用名称
spring.application.name=provider
# 应用服务 WEB 访问端口
server.port=8964
# dubbo 协议
dubbo.application.name=provider
dubbo.protocol.id=dubbo
dubbo.protocol.name=dubbo
# dubbo 协议端口( -1 表示自增端口,从 20880 开始)
dubbo.protocol.port=-1
# dubbo连接nacos的地址
dubbo.registry.address=nacos://47.113.227.146:8848
# Dubbo3 默认采用 “应用级服务发现 + 接口级服务发现” 的双注册模式,因此会发现应用级服务(应用名)和接口级服务(接口名)同时出现在 Nacos 控制台,可以通过配置 dubbo.registry.register-mode=instance/interface/all 来改变注册行为。
dubbo.registry.register-mode=interface
service
@DubboService
public class ProviderServiceImpl implements ProviderService {
@Override
public String hello() {
return "我是provider";
}
}
ProviderApplication
@SpringBootApplication
//指定dubbo扫描的包
@EnableDubbo(scanBasePackages = "com.example.provider.service")
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
Customer消费者
application.properties
Dubbo3.0.0版本以后,增加了是否注册消费者的参数,如果需要将消费者注册到nacos注册中心上,需要将参数(register-consumer-url)设置为true,默认是false。
# 应用名称
spring.application.name=consumer
# 应用服务 WEB 访问端口
server.port=8080
# dubbo 协议
dubbo.application.name=consumer
dubbo.protocol.id=dubbo
dubbo.protocol.name=dubbo
# Dubbo 消费端订阅服务端的应用名,多个服务提供者用逗号分隔
# 这里订阅"自己",会被忽略掉,请根据实际情况添加
dubbo.cloud.subscribed-services=provider
#Dubbo3.0.0版本以后,增加了是否注册消费者的参数,如果需要将消费者注册到nacos注册中心上,需要将参数(register-consumer-url)设置为true,默认是false。
dubbo.registry.address=nacos://47.113.227.146:8848?register-consumer-url=true
controller
@RestController
public class MyController {
@DubboReference
ProviderService service;
@GetMapping("/1")
public String test(){
return service.hello();
}
}
CustomerApplication
@SpringBootApplication
@EnableDubbo
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
错误
之前有试过无法注册到nacos上,报错Failed to register dubbo://192.168.1.104:20880/com.cola.interfaces.ProviderService
解决方法为:开启服务器上nacos的9848端口映射。