中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

dubbo好用的功能有哪些

發布時間:2022-01-04 16:21:37 來源:億速云 閱讀:136 作者:iii 欄目:開發技術

這篇文章主要講解了“dubbo好用的功能有哪些”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“dubbo好用的功能有哪些”吧!

直連Provider

在開發及測試環境下,可能需要繞過注冊中心,只測試指定服務提供者,這時候可能需要點對點直連,點對點直連模式,將以服務接口為單位,忽略注冊中心的提供者列表,A 接口配置點對點,不影響 B 接口從注冊中心獲取列表(說明:官方只建議開發&測試環境使用該功能),用法如下,url指定的地址就是直連地址:

<dubbo:reference id="demoService" interface="com.alibaba.dubbo.demo.DemoService" version="1.0.0"  url="dubbo://172.18.1.205:20888/" />

多版本

當一個接口實現,出現不兼容升級時,可以用版本號過渡,版本號不同的服務相互間不引用,用法如下:

<dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="demoService" version="1.0.0" />

利用dubbo該特性,我們能夠實現一些功能的灰度發布,實現步驟如下:

  1. 接口舊的實現定義version="1.0.0",接口新的實現version="2.0.0"

  2. Consumer端定義version="*"

這樣定義Provider和Consumer后,新舊接口實現各承擔50%的流量;

利用dubbo該特性,還能完成不兼容版本遷移:

  1. 在低壓力時間段,先升級一半Provider為新版本;

  2. 再將所有消費者升級為新版本;

  3. 然后將剩下的一半提供者升級為新版本。

回聲測試

回聲測試用于檢測服務是否可用,回聲測試按照正常請求流程執行,能夠測試整個調用是否通暢,可用于監控。
所有服務自動實現EchoService接口,只需將任意服務引用強制轉型為EchoServiceEchoService echoService = (EchoService) demoService;
System.out.println(echoService.$echo("hello"));

隱式參數


可以通過

  • 服務端set:

  • RpcContext.getContext().setAttachment("CRT_MEMBER_ID", "13828886888");
    1. 客戶端get:

    RpcContext.getContext().getAttachment("CRT_MEMBER_ID")

    上下文

    上下文中存放的是當前調用過程中所需的環境信息。所有配置信息都將轉換為 URL 的參數
    RpcContext 是一個 ThreadLocal 的臨時狀態記錄器,當接收到 RPC 請求,或發起 RPC 請求時,RpcContext 的狀態
    都會變化。例如:A 調 B,B 再調 C,則 B 機器上,在 B 調 C 之前,RpcContext 記錄的是 A 調 B 的信息,在 B 調 C
    之后,RpcContext 記錄的是 B 調 C 的信息。使用方式:

    boolean isConsumerSide = RpcContext.getContext().isConsumerSide();

    本地偽裝

    本地偽裝通常用于服務降級,例如某驗權服務,當服務提供方全部掛掉后,客戶端不拋出異常,而是通過 Mock 數據
    返回授權失敗。使用方式如下,mock指定的實現類在Provider拋出RpcException異常時執行(一定要拋出RpcException異常才執行),取代遠程返回結果:

    <dubbo:reference id="demoService" interface="com.alibaba.dubbo.demo.DemoService"                 version="1.0.0" mock="com.alibaba.dubbo.demo.consumer.mock.DemoServiceMock"/>

    DemoServiceMock實現源碼:

    public class DemoServiceMock implements DemoService {
        public String sayHello(String name) {
            return "mock-value";
        }
    }

    泛化調用

    泛化接口調用方式主要用于客戶端沒有 API 接口及模型類元的情況,參數及返回值中的所有 POJO 均用Map表示,通常用于框架集成,例如:實現一個通用的服務測試框架,可通過GenericService調用所有服務實現。使用方式:

    <dubbo:reference id="demoService" interface="com.alibaba.dubbo.demo.DemoService" generic="true"/>

    調用源碼:

    /**
     * @author afei
     * @version 1.0.0
     * @since 2017年11月22日
     */
    public class Main {

        public static void main(String[] args) {
            // 引?遠程服務, 該實例??封裝了所有與注冊中?及服務提供?連接,請緩存
            ReferenceConfig<GenericService> reference = new ReferenceConfig<GenericService>();
            // 弱類型接?名
            reference.setInterface("com.alibaba.dubbo.demo.DemoService");
            reference.setVersion("1.0.0");
            // 聲明為泛化接?
            reference.setGeneric(true);
            // ?com.alibaba.dubbo.rpc.service.GenericService可以替代所有接口引用?
            GenericService genericService = reference.get();
            // 基本類型以及Date,List,Map等不需要轉換,直接調?
            Object result = genericService.$invoke("sayYes", new String[] {"java.lang.String"}, new Object[] {"afei"});
            System.out.println("result --> "+result);

            // ?Map表示POJO參數,如果返回值為POJO也將自動轉成Map
            Map<String, Object> teacher = new HashMap<String, Object>();
            teacher.put("id", "1");
            teacher.put("name", "admin");
            teacher.put("age", "18");
            teacher.put("level", "3");
            teacher.put("remark", "測試");
            // 如果返回POJO將自動轉成Map
            result = genericService.$invoke("justTest", new String[]
                    {"com.alibaba.dubbo.demo.bean.HighTeacher"}, new Object[]{teacher});
            System.out.println("result --> "+result);
        }
    }

    訪問日志

    如果想記錄每次請求信息,可開啟訪問日志,類似于Ngnix的訪問日志。注意:此日志量比較大,請注意磁盤容量。使用方式(如果配置局部,全局訪問日志就會失效):
    配置全局:

    <dubbo:provider accesslog="/app/dubbo-demo.log"/>

    配置局部:

    <dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="demoService" accesslog="/app/demo.log"/>
    <dubbo:service interface="com.alibaba.dubbo.demo.TestService" ref="testService" accesslog="/app/test.log"/>

    日志格式樣式:

    [2017-11-22 10:23:20] 172.18.1.205:56144 -> 172.18.1.205:20886 - com.alibaba.dubbo.demo.DemoService:1.0.0 sayHello(java.lang.String) ["afei"]

    延遲暴露

    如果服務需要預熱時間,比如初始化本地緩存,等待相關資源就位等,可以使用delay進行延遲暴露。使Dubbo在Spring容器初始化完后延遲多少毫秒再暴露服務,這個真的很有用。使用方式:

    <dubbo:provider delay="5000"/>

    或者:

    <dubbo:service delay="5000" interface="com.alibaba.dubbo.demo.DemoService" ref="demoService" version="1.0.0"/>

感謝各位的閱讀,以上就是“dubbo好用的功能有哪些”的內容了,經過本文的學習后,相信大家對dubbo好用的功能有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

沧州市| 三门峡市| 惠来县| 永顺县| 竹山县| 祁门县| 泰州市| 贵南县| 荥经县| 永康市| 都江堰市| 泉州市| 札达县| 舒兰市| 洞口县| 曲水县| 调兵山市| 镇雄县| 都匀市| 湾仔区| 容城县| 巴彦淖尔市| 通州市| 定远县| 安泽县| 湟源县| 三穗县| 周口市| 浮梁县| 景宁| 永仁县| 寿光市| 泰安市| 呼玛县| 榕江县| 保靖县| 阿拉善左旗| 敦煌市| 霍邱县| 大新县| 阿图什市|