一、搭建dubbo示例代码
搭建自己的dubbo项目:示例代码:https://github.com/wyc192273/soul-learn-project/tree/main/dubbo-demo
-
接下来,我们dubbo的provider项目引入如下依赖:
<!-- 引入 Soul 针对 Dubbo 的集成的依赖 --> <dependency> <groupId>org.dromara</groupId> <artifactId>soul-spring-boot-starter-client-apache-dubbo</artifactId> <version>${last.version}</version> </dependency>
如果用的Alibaba Dubbo 2.6.X 的话,用如下依赖:
<!-- 引入 Soul 针对 Dubbo 的集成的依赖 -->
<dependency>
<groupId>org.dromara</groupId>
<artifactId>soul-spring-boot-starter-client-alibaba-dubbo</artifactId>
<version>${last.version}</version>
</dependency>
- 在我们自己的provider项目中,修改application.yaml文件添加如下配置:
soul:
# Soul 针对 Dubbo 的配置项,对应 DubboConfig 配置类
dubbo:
admin-url: http://127.0.0.1:9095 # Soul Admin 地址
context-path: /user-api # 设置在 Soul 网关的路由前缀,例如说 /order、/product 等等。
# 后续,网关会根据该 context-path 来进行路由
app-name: user-service # 应用名。未配置情况下,默认使用 Dubbo 的应用名
- 在Dubbo Service的实现类的方法上,添加@SoulDubboClient注解,用于设置每个Dubbo方法的soul网关对应的请求路径
@DubboService(group = "user", version = "1.0.0")
public class UserServiceImpl implements UserService {
@Override
@SoulDubboClient(path = "/getUser")
public String getUser(Integer id) {
return "user_" + id;
}
}
-
设置dubbo插件
需要设置soul的dubbo插件为开启状态,访问http://localhost:9095/#/system/plugin
dubbo插件,配置注册中心的地址,可以是zookeeper或nacos, 默认是zookeeper配置
{"register":"zookeeper://localhost:2181"} {"register":"nacos://localhost:8848"}
启动dubbo项目,这个时候去http://localhost:9095/#/plug/dubbo,发现选择器和规则注册成功
二、网关接入dubbo
-
apache-dubbo用户引入如下依赖: nacos和zookeeper可以根据自己选择配置相关依赖
<!--soul apache dubbo plugin start--> <dependency> <groupId>org.dromara</groupId> <artifactId>soul-spring-boot-starter-plugin-apache-dubbo</artifactId> <version>${soul.last.version}</version> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> <version>2.7.5</version> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.5</version> </dependency> <!-- Dubbo Nacos registry dependency start --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-registry-nacos</artifactId> <version>2.7.5</version> </dependency> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>1.1.4</version> </dependency> <!-- Dubbo Nacos registry dependency end--> <!-- Dubbo zookeeper registry dependency start--> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-client</artifactId> <version>4.0.1</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>4.0.1</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>4.0.1</version> </dependency> <!-- Dubbo zookeeper registry dependency end -->
-
alibaba-dubbo用户dubbo插件依赖换成下面的即可:
<!--soul alibaba dubbo plugin start--> <dependency> <groupId>org.dromara</groupId> <artifactId>soul-spring-boot-starter-plugin-alibaba-dubbo</artifactId> <version>${last.version}</version> </dependency> <!-- soul alibaba dubbo plugin end-->
重启网关服务即可
三、调用网关的dubbo接口
调用网关的dubbo接口,必须使用post方式调用网关,并且content-type是application/json,用body传参数的json字符串的形式
- 单个java bean参数类型,默认支持,代码如下
@SoulDubboClient(path = "/getUser")
public String getUser(Integer id) {
return "user_" + id;
}
getUser方法调用,使用postman调用,如图所示
单个参数,参数是对象形式传参:
@Override
@SoulDubboClient(path = "/saveUser")
public Object saveUser(User user) {
return user;
}
- 多个参数支持
@Override
@SoulDubboClient(path = "/replaceUser")
public Object replaceUser(int id, String name, User user) {
System.out.println(user);
user.setId(id);
user.setName(name);
return user;
}
这里要注意,参数的顺序要和dubbo的顺序一致,否则会有问题
四、总结
soul的dubbo实现,实际上就是 http请求 --> 网关 --> dubbo provider 这样一个流程。
网关将http协议请求,通过使用dubbo泛化调用 的方式 调用到我们的dubbo服务