你們好,今天開始給你們分享 — Dubbo 專題之 Dubbo 服務在線測試。在前一個章節中咱們介紹了 Dubbo 中的服務治理,同時咱們瞭解到 Dubbo 爲咱們提供了一些經常使用的服務治理能力包括:調節路由、標籤路由、黑白名單、動態配置、負載均衡等等。咱們也學習到怎樣使用 Dubbo Admin 控制檯給咱們的分佈式服務進行服務治理。那麼在本章節咱們會主要討論 Dubbo Admin 爲咱們提供一種在線調用服務的能力,咱們能夠利用這種方式進行服務的在線測試而不須要編寫咱們的單元測試用例。那下面就讓咱們快速開始吧!java
在 Dubbo Admin 中爲咱們提供一種能夠在控制檯進行遠程服務調用的能力,其實現原理就是利用了咱們 Dubbo 提供的泛化調用在不須要 jar
包依賴的狀況下對遠程服務進行調用。各位小夥伴能夠參考咱們前面章節《Dubbo 泛化引用》中對泛化引用的討論,其核心原理是利用服務的元數據進行遠程調用,核心API
爲GenericService
。git
下面咱們就開始咱們的服務在線測試演示。首先咱們建立一個服務提供方,項目結構以下:apache
因爲這裏只須要服務提供者提供服務便可,而在咱們的 Dubbo Admin 中調用服務提供方,全部這裏不須要消費端。下面咱們看看定義的接口代碼:編程
/** * @author <a href="http://youngitman.tech">青年IT男</a> * @version v1.0.0 * @className BookService * @description * @JunitTest: {@link } * @date 2020-10-24 13:29 **/ public interface BookFacade { //查詢全部圖書 List<Book> queryAll(); //根據請求參數過濾圖書 default List<Book> queryByName(@NotNull RequestParameter request) { return Lists.newArrayList(); } }
下面咱們開始 Dubbo Admin 的演示,首先咱們找到使用的入口:json
咱們在搜索
框中輸入咱們調用服務方接口名稱進行搜索,能夠查找到相關元數據信息以下:api
在搜索結果中咱們能夠看到暴露服務接口中的方法名稱、參數列表、返回值信息。接下來咱們使用queryByName
方法進行測試,點擊右邊的編輯圖標
進入:數組
上面的Parameters
是咱們的參數列表數組,每一個位置的數組元素表明對應位置的方法參數。咱們這裏輸入SpringBoot
參數名稱查詢到結果爲一個列表集合,其中列表元素類型爲com.muke.dubbocourse.common.domain.Book
,對象的屬性name
值爲SpringBoot
、desc
值爲SpringBoot
實戰。微信
Dubbo Admin 服務測試中其核心是須要方法簽名信息即方法名稱、參數列表、返回值類型信息,有了這些信息咱們才能按照對應方法的參數進行填值,拼裝出完整的服務消費者。如下圖能夠很好的展現其原理:app
從上圖能夠看到咱們的服務提供者註冊元數據信息到註冊中心(元數據中心能夠是獨立的服務),而後 Dubbo Admin 拉取元數據展現到頁面上,同時咱們在 Dubbo Admin 中配置調用的服務方法參數後發起對遠程服務的調用。下面咱們看看在zookeeper
中註冊的元數據:負載均衡
Json
格式以下:
{ "parameters": {//服務提供者配置信息 "side": "provider", "release": "2.7.8", "methods": "queryByName,queryAll", "deprecated": "false", "dubbo": "2.0.2", "interface": "com.muke.dubbocourse.common.api.BookFacade", "generic": "false", "serialization": "hessian2", "metadata-type": "remote", "application": "demo-provider", "dynamic": "true", "anyhost": "true" }, "canonicalName": "com.muke.dubbocourse.common.api.BookFacade",//接口描述 "codeSource": "file:/Users/liyong/work/workspace/course/target/classes/",//源碼所在路徑 //全部方法信息 "methods": [{ "name": "queryByName",//方法名稱 "parameterTypes": ["com.muke.dubbocourse.common.api.RequestParameter"],//方法參數類型 "returnType": "java.util.List\u003ccom.muke.dubbocourse.common.domain.Book\u003e"//方法返回值類型 }, { "name": "queryAll", "parameterTypes": [], "returnType": "java.util.List\u003ccom.muke.dubbocourse.common.domain.Book\u003e" }], "types": [{//全部類型描述列表 "type": "com.muke.dubbocourse.common.api.RequestParameter",//方法參數類型 "properties": {//描述全部屬性字段 "name": { "type": "java.lang.String", "typeBuilderName": "org.apache.dubbo.metadata.definition.builder.DefaultTypeBuilder" } }, "typeBuilderName": "org.apache.dubbo.metadata.definition.builder.DefaultTypeBuilder" }, { "type": "java.lang.String", "typeBuilderName": "org.apache.dubbo.metadata.definition.builder.DefaultTypeBuilder" }, { "type": "com.muke.dubbocourse.common.domain.Book", "properties": { "name": { "type": "java.lang.String", "typeBuilderName": "org.apache.dubbo.metadata.definition.builder.DefaultTypeBuilder" }, "desc": { "type": "java.lang.String", "typeBuilderName": "org.apache.dubbo.metadata.definition.builder.DefaultTypeBuilder" } }, "typeBuilderName": "org.apache.dubbo.metadata.definition.builder.DefaultTypeBuilder" }, { "type": "int", "typeBuilderName": "org.apache.dubbo.metadata.definition.builder.DefaultTypeBuilder" }, { "type": "char", "typeBuilderName": "org.apache.dubbo.metadata.definition.builder.DefaultTypeBuilder" }] }
上面與服務測試相關的就是methods
和types
所包含的方法和類型信息,其中 Dubbo Admin 根據這些信息在控制檯上顯示出來,並讓用戶輸入配置參數值。
在本小節中咱們學習了 Dubbo Admin 中提供的服務在線測試能力。咱們主要介紹了 Dubbo Admin 中在線測試的使用方式,同時咱們瞭解到了 Dubbo Admin 在線測試的實現原理是經過 Dubbo 的泛化調用實現,其核心 API 是GenericService
。在整個在線測試中最爲核心的是咱們須要服務提供者的元數據,根據元數據信息在 Dubbo Admin 中對須要調用的方法進行參數配置,而後發起遠程調用。
本節課程的重點以下:
我的從事金融行業,就任過易極付、思建科技、某網約車平臺等重慶一流技術團隊,目前就任於某銀行負責統一支付系統建設。自身對金融行業有強烈的愛好。同時也實踐大數據、數據存儲、自動化集成和部署、分佈式微服務、響應式編程、人工智能等領域。同時也熱衷於技術分享創立公衆號和博客站點對知識體系進行分享。關注公衆號: 青年IT男 獲取最新技術文章推送!
博客地址: http://youngitman.tech
微信公衆號: