1、新加公共API子模块,用于定义接口对外暴露,远程调用需要此接口
public interface TestService {
String dubboTest(String message); //测试方法
}
2、提供者代码(子模块结构如下)
2.1 安装依赖(包括公共API)
<!--dubbo依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>
<!--api公共依赖-->
<dependency>
<groupId>cloubalibabablx</groupId>
<artifactId>dubbo-api-sample</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
2.2 bootstrap.yml进行dubbo配置
dubbo:
scan:
base-packages: com.springcloudalibaba.dubbo.service.Impl #dubbo服务扫描基准包
protocol:
name: dubbo #dubbo协议
port: -1 # dubbo 协议端口( -1 表示自增端口,从 20880 开始)
registry:
address: spring-cloud://localhost #spring-cloud://localhost说明挂载到 Spring Cloud 注册中心
spring:
main:
allow-bean-definition-overriding: true # 允许bean定义覆盖 Spring Boot 2.1 需要设定
其中base-packages代表扫描的实现公共API的类下的包路径
2.3 新建类实现公共API接口
注:@Service是dubbo的,不是spring下的
@Service
public class TestServiceImpl implements TestService {
@Override
public String dubboTest(String message){
return "我是提供者,已收到消息"+message;
}
}
3、消费端
3.1 安装依赖,与提供端一致
3.2 bootstrap.yml进行dubbo配置配置文件
其中 subscribed-services是提供端的服务名称,指的是调用哪个服务下的
dubbo:
registry:
address: spring-cloud://localhost #spring-cloud://localhost说明挂载到 Spring Cloud 注册中心
cloud:
subscribed-services: dubbo-provider-sample # 订阅的服务提供者应用名称
3.3 测试代码
@RestController
public class DubboTestController {
@Reference
private TestService testService;
@GetMapping("/dubboTest")
public String dubboTest(){ // dubbo方式服务消费者调用服务提供者的测试方法
return testService.dubboTest("嘿嘿!我是服务消费者");
}
}
4、jdk17踩坑
JDK 17使用Dubbo时,需要增加一下以下vm参数
--add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.math=ALL-UNNAMED
新版本踩坑:
新版本:spring cloud alibaba 版本2021.0.5.0
1、生产者注入注解为:@DubboService
2、消费者注解:@DubboReference
3、依赖有所变动,需要使用2.7.13版本的dubbo
<!--dubbo依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
<version>2.2.7.RELEASE</version>
</dependency>
4、对应对版本所有的子模块,需要新增依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
5、如果启动时报循环依赖错误,需要修改配置文件
spring:
main:
allow-circular-references: true
注:如果消费端启动报启动类错误的话,则造消费端配置文件新增如下配置
dubbo:
protocol:
name: dubbo #dubbo协议
port: -1 # dubbo 协议端口( -1 表示自增端口,从 20880 开始)