Dubbo 服務在線測試

前言

你們好,今天開始給你們分享 — Dubbo 專題之 Dubbo 服務在線測試。在前一個章節中咱們介紹了 Dubbo 中的服務治理,同時咱們瞭解到 Dubbo 爲咱們提供了一些經常使用的服務治理能力包括:調節路由、標籤路由、黑白名單、動態配置、負載均衡等等。咱們也學習到怎樣使用 Dubbo Admin 控制檯給咱們的分佈式服務進行服務治理。那麼在本章節咱們會主要討論 Dubbo Admin 爲咱們提供一種在線調用服務的能力,咱們能夠利用這種方式進行服務的在線測試而不須要編寫咱們的單元測試用例。那下面就讓咱們快速開始吧!java

1. 服務在線測試簡介

在 Dubbo Admin 中爲咱們提供一種能夠在控制檯進行遠程服務調用的能力,其實現原理就是利用了咱們 Dubbo 提供的泛化調用在不須要 jar 包依賴的狀況下對遠程服務進行調用。各位小夥伴能夠參考咱們前面章節《Dubbo 泛化引用》中對泛化引用的討論,其核心原理是利用服務的元數據進行遠程調用,核心APIGenericServicegit

2. 示例演示

下面咱們就開始咱們的服務在線測試演示。首先咱們建立一個服務提供方,項目結構以下:apache

idea

因爲這裏只須要服務提供者提供服務便可,而在咱們的 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();
    }

}

3. 服務在線測試

​ 下面咱們開始 Dubbo Admin 的演示,首先咱們找到使用的入口:json

idea1

咱們在搜索框中輸入咱們調用服務方接口名稱進行搜索,能夠查找到相關元數據信息以下:api

idea2

在搜索結果中咱們能夠看到暴露服務接口中的方法名稱、參數列表、返回值信息。接下來咱們使用queryByName方法進行測試,點擊右邊的編輯圖標進入:數組

idea3

上面的Parameters是咱們的參數列表數組,每一個位置的數組元素表明對應位置的方法參數。咱們這裏輸入SpringBoot參數名稱查詢到結果爲一個列表集合,其中列表元素類型爲com.muke.dubbocourse.common.domain.Book,對象的屬性name值爲SpringBootdesc值爲SpringBoot實戰。微信

4. 原理分析

Dubbo Admin 服務測試中其核心是須要方法簽名信息即方法名稱、參數列表、返回值類型信息,有了這些信息咱們才能按照對應方法的參數進行填值,拼裝出完整的服務消費者。如下圖能夠很好的展現其原理:app

在線測試

從上圖能夠看到咱們的服務提供者註冊元數據信息到註冊中心(元數據中心能夠是獨立的服務),而後 Dubbo Admin 拉取元數據展現到頁面上,同時咱們在 Dubbo Admin 中配置調用的服務方法參數後發起對遠程服務的調用。下面咱們看看在zookeeper中註冊的元數據:負載均衡

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"],//方法參數類型
        "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"
    }]
}

上面與服務測試相關的就是methodstypes所包含的方法和類型信息,其中 Dubbo Admin 根據這些信息在控制檯上顯示出來,並讓用戶輸入配置參數值。

5. 小結

在本小節中咱們學習了 Dubbo Admin 中提供的服務在線測試能力。咱們主要介紹了 Dubbo Admin 中在線測試的使用方式,同時咱們瞭解到了 Dubbo Admin 在線測試的實現原理是經過 Dubbo 的泛化調用實現,其核心 API 是GenericService。在整個在線測試中最爲核心的是咱們須要服務提供者的元數據,根據元數據信息在 Dubbo Admin 中對須要調用的方法進行參數配置,而後發起遠程調用。

本節課程的重點以下:

  1. 理解 Dubbo Admin 在線測試
  2. 瞭解怎樣使用在線測試
  3. 瞭解在線測試的實現原理

做者

我的從事金融行業,就任過易極付、思建科技、某網約車平臺等重慶一流技術團隊,目前就任於某銀行負責統一支付系統建設。自身對金融行業有強烈的愛好。同時也實踐大數據、數據存儲、自動化集成和部署、分佈式微服務、響應式編程、人工智能等領域。同時也熱衷於技術分享創立公衆號和博客站點對知識體系進行分享。關注公衆號: 青年IT男 獲取最新技術文章推送!

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

微信公衆號:

相關文章
相關標籤/搜索