本文章基于dubbo-spring-boot-starter最新依赖,快速搭建spring boot dubbo工程,采用nacos作为注册中心。
Spring boot 版本:3.2.5
java 版本:17
项目结构
1、主要依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>3.3.0-beta.2</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
<version>3.3.0-beta.2</version>
</dependency>
2、创建公共模块comment-interface
可以理解为服务提供端和服务消费端的桥梁(服务端和消费端需要同时引入该模块),当消费端调用该接口时,通过注册中心在服务提供端就可以找到该接口的实现类,进而实现服务间通讯。
public interface HelloWorldDemoApi {
public String helloWorld(String string);
}
3、服务提供者
(1)在pom中引入该模块
<dependency>
<groupId>com.example</groupId>
<artifactId>common-interface</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
(2)实现HelloWorldDemoApi接口,使用注解@DubboService注解标注为服务提供者
@DubboService
@Service
@Slf4j
public class DubboHelloWorldDemoApiImpl implements HelloWorldDemoApi {
@Override
public String helloWorld(String string){
log.info(string);
return string + " Hello World!";
}
}
(3)在启动类上加上@EnableDubbo注解,启动Dubbo自动注册功能
@SpringBootApplication
@EnableDubbo
public class CloudProviderApplication {
public static void main(String[] args) {
SpringApplication.run(CloudProviderApplication.class, args);
}
}
(4)配置application.properties
spring.application.name=cloud-provider
server.port=8081
dubbo.registry.address=nacos://127.0.0.1:8848
dubbo.registry.username=nacos
dubbo.registry.password=nacos
#是否启动 qos 默认 true
# 能够列出来该实例服务提供者与调用者状态
dubbo.application.qosEnable=true
# 启动 qos 绑定的端口 默认 22222
dubbo.application.qosPort=22222
# 是否允许远程访问 默认是 false
dubbo.application.qosAcceptForeignIp=false
4、服务消费方
(1)在pom中引入该模块
<dependency>
<groupId>com.example</groupId>
<artifactId>common-interface</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
(2)注入HelloWorldDemoApi服务,使用注解@DubboReference注解标注为服务调用方
@RestController
public class TestController{
@DubboReference
private HelloWorldDemoApi api;
@GetMapping("/test")
public String getResult(){
return api.helloWorld("tom");
}
}
(3)在启动类上加上@EnableDubbo注解,启动Dubbo自动注册功能
@SpringBootApplication
@EnableDubbo
public class CloudConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(CloudConsumerApplication.class, args);
}
}
(4)配置application.properties
spring.application.name=cloud-consumer
server.port=8082
dubbo.registry.address=nacos://127.0.0.1:8848
dubbo.registry.username=nacos
dubbo.registry.password=nacos
#是否启动 qos 默认 true
# 能够列出来该实例服务提供者与调用者状态
dubbo.application.qosEnable=true
# 启动 qos 绑定的端口 默认 22222
# 服务提供者已经把该端口占用了,那么服务消费者就不能使用该端口了,需要换一下
dubbo.application.qosPort=33333
# 是否允许远程访问 默认是 false
dubbo.application.qosAcceptForeignIp=false
5、测试
启动提供端服务和消费端服务,在浏览器中输入http://127.0.0.1:8082/test
输出:
Tom Hello World!