一、搭建dubbo示例代碼
搭建自己的dubbo項(xiàng)目:示例代碼:https://github.com/wyc192273/soul-learn-project/tree/main/dubbo-demo
-
接下來,我們dubbo的provider項(xiàng)目引入如下依賴:
<!-- 引入 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項(xiàng)目中,修改application.yaml文件添加如下配置:
soul:
# Soul 針對 Dubbo 的配置項(xiàng),對應(yīng) DubboConfig 配置類
dubbo:
admin-url: http://127.0.0.1:9095 # Soul Admin 地址
context-path: /user-api # 設(shè)置在 Soul 網(wǎng)關(guān)的路由前綴,例如說 /order、/product 等等。
# 后續(xù),網(wǎng)關(guān)會(huì)根據(jù)該 context-path 來進(jìn)行路由
app-name: user-service # 應(yīng)用名。未配置情況下,默認(rèn)使用 Dubbo 的應(yīng)用名
- 在Dubbo Service的實(shí)現(xiàn)類的方法上,添加@SoulDubboClient注解,用于設(shè)置每個(gè)Dubbo方法的soul網(wǎng)關(guān)對應(yīng)的請求路徑
@DubboService(group = "user", version = "1.0.0")
public class UserServiceImpl implements UserService {
@Override
@SoulDubboClient(path = "/getUser")
public String getUser(Integer id) {
return "user_" + id;
}
}
-
設(shè)置dubbo插件
需要設(shè)置soul的dubbo插件為開啟狀態(tài),訪問http://localhost:9095/#/system/plugin
image.pngdubbo插件,配置注冊中心的地址,可以是zookeeper或nacos, 默認(rèn)是zookeeper配置
{"register":"zookeeper://localhost:2181"} {"register":"nacos://localhost:8848"}
啟動(dòng)dubbo項(xiàng)目,這個(gè)時(shí)候去http://localhost:9095/#/plug/dubbo,發(fā)現(xiàn)選擇器和規(guī)則注冊成功
二、網(wǎng)關(guān)接入dubbo
-
apache-dubbo用戶引入如下依賴: nacos和zookeeper可以根據(jù)自己選擇配置相關(guān)依賴
<!--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-->
重啟網(wǎng)關(guān)服務(wù)即可
三、調(diào)用網(wǎng)關(guān)的dubbo接口
調(diào)用網(wǎng)關(guān)的dubbo接口,必須使用post方式調(diào)用網(wǎng)關(guān),并且content-type是application/json,用body傳參數(shù)的json字符串的形式
- 單個(gè)java bean參數(shù)類型,默認(rèn)支持,代碼如下
@SoulDubboClient(path = "/getUser")
public String getUser(Integer id) {
return "user_" + id;
}
getUser方法調(diào)用,使用postman調(diào)用,如圖所示
單個(gè)參數(shù),參數(shù)是對象形式傳參:
@Override
@SoulDubboClient(path = "/saveUser")
public Object saveUser(User user) {
return user;
}
- 多個(gè)參數(shù)支持
@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;
}
這里要注意,參數(shù)的順序要和dubbo的順序一致,否則會(huì)有問題
四、總結(jié)
soul的dubbo實(shí)現(xiàn),實(shí)際上就是 http請求 --> 網(wǎng)關(guān) --> dubbo provider 這樣一個(gè)流程。
網(wǎng)關(guān)將http協(xié)議請求,通過使用dubbo泛化調(diào)用 的方式 調(diào)用到我們的dubbo服務(wù)