Dubbo 服務在線測試

前言

大家好,今天開始給大家分享 — Dubbo 專題之 Dubbo 服務在線測試诵叁。在前一個章節(jié)中我們介紹了 Dubbo 中的服務治理玉凯,同時我們了解到 Dubbo 為我們提供了一些常用的服務治理能力包括:調(diào)節(jié)路由、標簽路由盲厌、黑白名單、動態(tài)配置、負載均衡等等阀湿。我們也學習到怎樣使用 Dubbo Admin 控制臺給我們的分布式服務進行服務治理间坐。那么在本章節(jié)我們會主要討論 Dubbo Admin 為我們提供一種在線調(diào)用服務的能力,我們可以利用這種方式進行服務的在線測試而不需要編寫我們的單元測試用例。那下面就讓我們快速開始吧溯警!

1. 服務在線測試簡介

在 Dubbo Admin 中為我們提供一種可以在控制臺進行遠程服務調(diào)用的能力,其實現(xiàn)原理就是利用了我們 Dubbo 提供的泛化調(diào)用在不需要 jar 包依賴的情況下對遠程服務進行調(diào)用。各位小伙伴可以參考我們前面章節(jié)《Dubbo 泛化引用》中對泛化引用的討論,其核心原理是利用服務的元數(shù)據(jù)進行遠程調(diào)用,核心APIGenericService

2. 示例演示

下面我們就開始我們的服務在線測試演示。首先我們創(chuàng)建一個服務提供方,項目結(jié)構(gòu)如下:

idea

由于這里只需要服務提供者提供服務即可窄刘,而在我們的 Dubbo Admin 中調(diào)用服務提供方,所有這里不需要消費端。下面我們看看定義的接口代碼:

/**
 * @author <a >青年IT男</a>
 * @version v1.0.0
 * @className BookService
 * @description
 * @JunitTest: {@link  }
 * @date 2020-10-24 13:29
 **/
public interface BookFacade {

   //查詢所有圖書
    List<Book> queryAll();

   //根據(jù)請求參數(shù)過濾圖書
    default List<Book> queryByName(@NotNull RequestParameter request) {
        return Lists.newArrayList();
    }

}

3. 服務在線測試

下面我們開始 Dubbo Admin 的演示旦事,首先我們找到使用的入口:
idea1

我們在搜索框中輸入我們調(diào)用服務方接口名稱進行搜索卖鲤,可以查找到相關(guān)元數(shù)據(jù)信息如下:

idea2

在搜索結(jié)果中我們可以看到暴露服務接口中的方法名稱肾扰、參數(shù)列表、返回值信息蛋逾。接下來我們使用queryByName方法進行測試集晚,點擊右邊的編輯圖標進入:

idea3

上面的Parameters是我們的參數(shù)列表數(shù)組,每個位置的數(shù)組元素代表對應位置的方法參數(shù)区匣。我們這里輸入SpringBoot參數(shù)名稱查詢到結(jié)果為一個列表集合偷拔,其中列表元素類型為com.muke.dubbocourse.common.domain.Book,對象的屬性name值為SpringBoot亏钩、desc值為SpringBoot實戰(zhàn)条摸。

4. 原理分析

Dubbo Admin 服務測試中其核心是需要方法簽名信息即方法名稱、參數(shù)列表铸屉、返回值類型信息,有了這些信息我們才能按照對應方法的參數(shù)進行填值切端,拼裝出完整的服務消費者彻坛。以下圖可以很好的展示其原理:

在線測試

從上圖可以看到我們的服務提供者注冊元數(shù)據(jù)信息到注冊中心(元數(shù)據(jù)中心可以是獨立的服務),然后 Dubbo Admin 拉取元數(shù)據(jù)展示到頁面上踏枣,同時我們在 Dubbo Admin 中配置調(diào)用的服務方法參數(shù)后發(fā)起對遠程服務的調(diào)用昌屉。下面我們看看在zookeeper中注冊的元數(shù)據(jù):

idea4

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"],//方法參數(shù)類型
        "returnType": "java.util.List\u003ccom.muke.dubbocourse.common.domain.Book\u003e"http://方法返回值類型
    }, {
        "name": "queryAll",
        "parameterTypes": [],
        "returnType": "java.util.List\u003ccom.muke.dubbocourse.common.domain.Book\u003e"
    }],
    "types": [{//所有類型描述列表
        "type": "com.muke.dubbocourse.common.api.RequestParameter",//方法參數(shù)類型
        "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"
    }]
}

上面與服務測試相關(guān)的就是methodstypes所包含的方法和類型信息,其中 Dubbo Admin 根據(jù)這些信息在控制臺上顯示出來茵瀑,并讓用戶輸入配置參數(shù)值间驮。

5. 小結(jié)

在本小節(jié)中我們學習了 Dubbo Admin 中提供的服務在線測試能力。我們主要介紹了 Dubbo Admin 中在線測試的使用方式马昨,同時我們了解到了 Dubbo Admin 在線測試的實現(xiàn)原理是通過 Dubbo 的泛化調(diào)用實現(xiàn)竞帽,其核心 API 是GenericService。在整個在線測試中最為核心的是我們需要服務提供者的元數(shù)據(jù)鸿捧,根據(jù)元數(shù)據(jù)信息在 Dubbo Admin 中對需要調(diào)用的方法進行參數(shù)配置屹篓,然后發(fā)起遠程調(diào)用。

本節(jié)課程的重點如下:

  1. 理解 Dubbo Admin 在線測試

  2. 了解怎樣使用在線測試

  3. 了解在線測試的實現(xiàn)原理

作者

個人從事金融行業(yè)匙奴,就職過易極付堆巧、思建科技、某網(wǎng)約車平臺等重慶一流技術(shù)團隊,目前就職于某銀行負責統(tǒng)一支付系統(tǒng)建設(shè)谍肤。自身對金融行業(yè)有強烈的愛好啦租。同時也實踐大數(shù)據(jù)、數(shù)據(jù)存儲荒揣、自動化集成和部署篷角、分布式微服務、響應式編程乳附、人工智能等領(lǐng)域内地。同時也熱衷于技術(shù)分享創(chuàng)立公眾號和博客站點對知識體系進行分享。關(guān)注公眾號:青年IT男 獲取最新技術(shù)文章推送赋除!

博客地址: http://youngitman.tech

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末阱缓,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子举农,更是在濱河造成了極大的恐慌荆针,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件颁糟,死亡現(xiàn)場離奇詭異航背,居然都是意外死亡,警方通過查閱死者的電腦和手機棱貌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門玖媚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人婚脱,你說我怎么就攤上這事今魔。” “怎么了障贸?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵错森,是天一觀的道長。 經(jīng)常有香客問我篮洁,道長涩维,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任袁波,我火速辦了婚禮瓦阐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘锋叨。我一直安慰自己垄分,他們只是感情好,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布娃磺。 她就那樣靜靜地躺著薄湿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上豺瘤,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天吆倦,我揣著相機與錄音,去河邊找鬼坐求。 笑死蚕泽,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的桥嗤。 我是一名探鬼主播须妻,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼泛领!你這毒婦竟也來了荒吏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤渊鞋,失蹤者是張志新(化名)和其女友劉穎绰更,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锡宋,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡儡湾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了执俩。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片徐钠。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖役首,靈堂內(nèi)的尸體忽然破棺而出丹皱,到底是詐尸還是另有隱情,我是刑警寧澤宋税,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站讼油,受9級特大地震影響杰赛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜矮台,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一乏屯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瘦赫,春花似錦辰晕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春窘问,著一層夾襖步出監(jiān)牢的瞬間辆童,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工惠赫, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留把鉴,地道東北人。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓儿咱,卻偏偏與公主長得像庭砍,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子混埠,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 為什么要用 Dubbo 遠程通信背景 技術(shù)架構(gòu)的發(fā)展從單體到分布式怠缸,是一種順勢而為的架構(gòu)演進,也是一種被逼無奈的技...
    WEIJAVA閱讀 857評論 0 1
  • Dubbo-Api-Docs 是一個展示dubbo接口文檔,測試接口的工具. 參考了springfox的設(shè)計,通過...
    邪影oO閱讀 992評論 0 0
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月岔冀,有人笑有人哭凯旭,有人歡樂有人憂愁,有人驚喜有人失落使套,有的覺得收獲滿滿有...
    陌忘宇閱讀 8,536評論 28 53
  • 信任包括信任自己和信任他人 很多時候罐呼,很多事情,失敗侦高、遺憾嫉柴、錯過,源于不自信奉呛,不信任他人 覺得自己做不成计螺,別人做不...
    吳氵晃閱讀 6,189評論 4 8
  • 步驟:發(fā)微博01-導航欄內(nèi)容 -> 發(fā)微博02-自定義TextView -> 發(fā)微博03-完善TextView和...
    dibadalu閱讀 3,136評論 1 3