生活随笔
收集整理的這篇文章主要介紹了
Dubbo Admin服务测试功能
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
基于Dubbo2.7的元數據,Dubbo Admin實現了服務測試功能,可以通過泛化調用,在控制臺上調用真實的服務提供者
使用方式
- 部署服務提供者: 可以在這里下載demo,此工程基于spring boot,方便在IDE或者命令行啟動,對于服務測試來說,只需要啟動dubbo-basic-provider即可。
- 服務查詢: 完成服務端部署后,可以到Dubbo Admin的服務測試頁面上查詢對應的服務:?
這里的信息和元數據類似,包含方法名,參數類型和返回值信息,點擊右邊的標簽就可以進入服務測試頁面 - 服務測試:?
服務測試頁面包含了兩個json編輯器,參數類型的信息都是以json格式保存,這里需要填入對應的參數值(本例中數類型時String),填寫完成后點擊執行即可對服務端發起調用,調用結果展示在右邊的編輯器中,如果調用失敗,會顯示詳細的失敗原因,下面來看一下調用失敗的例子:
本例中,先關掉Dubbo服務提供者的進程,再執行服務測試,可以看到返回的結果是找不到服務提供者的異常。和普通調用一樣,業務和框架的異常都會返回在結果中,方便業務排查。 - 復合類型參數
考慮UserService中的以下方法和類型:
//org.apache.dubbo.demo.api.UserService
Result getUser(String name, UserInfoDO userInfoDO);
public class UserInfoDO {private int id;private LocationDO locationDO;private DepartmentDO departmentDO;@Overridepublic String toString() {return "UserInfoDO{" +"id=" + id +", locationDO=" + locationDO.toString() +", departmentDO=" + departmentDO.toString() +'}';}
}
public class DepartmentDO {private String departName;private LocationDO departLocation;@Overridepublic String toString() {return "DepartmentDO{" +"departName='" + departName + '\'' +", departLocation=" + departLocation.toString() +'}';}
}
public class LocationDO {private String address;private int postNum;@Overridepublic String toString() {return "LocationDO{" +"address='" + address + '\'' +", postNum=" + postNum +'}';}
}
參數是比較復雜的符合類型參數,服務測試的時候,會逐層展開填寫每一個field的值,如下圖所示:
同樣可以調用成功并且返回結果
原理:數據來源
服務測試中,最重要的就是完整的方法簽名信息,和參數的類型信息,有了這些信息才能夠一步步填入每個參數的值,拼裝出完整的服務消費者。在Dubbo2.7中,新增了元數據中心,Dubbo Admin的方法簽名和參數類型信息就是從這里來的:
如圖所示,服務端在運行的時候會將服務的元數據信息注冊到元數據中心,格式如下:
{..."methods": [{"name": "sayHello","parameterTypes": ["org.apache.dubbo.demo.model.User"],"returnType": "org.apache.dubbo.demo.model.Result"},...],"types": [{"type": "char"},{"type": "long"},{"type": "org.apache.dubbo.demo.model.Result","properties": {"msg": {"type": "java.lang.String","properties": {"value": {"type": "char[]"},"hash": {"type": "int"}}},"userName": {"type": "java.lang.String","properties": {"value": {"type": "char[]"},"hash": {"type": "int"}}}}},{"type": "org.apache.dubbo.demo.model.User","properties": {"id": {"type": "java.lang.Long","properties": {"value": {"type": "long"}}},"username": {"type": "java.lang.Sring","properties": {"value": {"type": "char[]"},"hash": {"type": "int"}}}}},...]
}
與服務測試相關的就是methods和types所包含的方法和類型信息,Dubbo Admin根據這些信息,將參數渲染到服務測試頁面的Json Editor中,由用戶來輸入每個參數,每個成員變量的值。
原理: 泛化調用
有了參數類型,下一個問題就是怎么能夠調用到服務端,在傳統的Dubbo RPC調用中,客戶端需要依賴服務端的API jar包(參考前文demo中的dubbo-basic-consumer),這對于Dubbo Admin來說不太可能,因為服務的上下線是動態的,Dubbo Admin無法動態增加jar包依賴,因此需要用到Dubbo中的泛化調用,指的是在沒有服務端API接口的情況下,客戶端直接通過?GenericService?接口來發起服務調用,返回值中的數據對象都用Map來表示。泛化調用在服務端不需要做特殊處理,只需要客戶端發起即可。
總結和展望
本文簡單介紹了服務測試的用法和原理,后續會進一步針對該功能進行增強,比如處理抽象類的參數類型,支持從json文件導入參數值,支持對參數值的保存等等,方便對服務接口進行回歸測試。
原文:http://dubbo.apache.org/zh-cn/blog/service-test.html
?
總結
以上是生活随笔為你收集整理的Dubbo Admin服务测试功能的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。