日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線(xiàn)咨詢(xún)客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

dubbo功能非常完善,很多時(shí)候我們不需要重復(fù)造輪子,下面列舉一些你不一定知道,但是很好用的功能;

Dubbo框架的一些很好用的點(diǎn),80%程序員還不知道

 

直連Provider

在開(kāi)發(fā)及測(cè)試環(huán)境下,可能需要繞過(guò)注冊(cè)中心,只測(cè)試指定服務(wù)提供者,這時(shí)候可能需要點(diǎn)對(duì)點(diǎn)直連,點(diǎn)對(duì)點(diǎn)直連模式,將以服務(wù)接口為單位,忽略注冊(cè)中心的提供者列表,A 接口配置點(diǎn)對(duì)點(diǎn),不影響 B 接口從注冊(cè)中心獲取列表(說(shuō)明:官方只建議開(kāi)發(fā)&測(cè)試環(huán)境使用該功能),用法如下,url指定的地址就是直連地址:

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

多版本

當(dāng)一個(gè)接口實(shí)現(xiàn),出現(xiàn)不兼容升級(jí)時(shí),可以用版本號(hào)過(guò)渡,版本號(hào)不同的服務(wù)相互間不引用,用法如下:

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

利用dubbo該特性,我們能夠?qū)崿F(xiàn)一些功能的灰度發(fā)布,實(shí)現(xiàn)步驟如下:

  1. 接口舊的實(shí)現(xiàn)定義version="1.0.0",接口新的實(shí)現(xiàn)version="2.0.0"
  2. Consumer端定義version="*"

這樣定義Provider和Consumer后,新舊接口實(shí)現(xiàn)各承擔(dān)50%的流量;

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

  1. 在低壓力時(shí)間段,先升級(jí)一半Provider為新版本;
  2. 再將所有消費(fèi)者升級(jí)為新版本;
  3. 然后將剩下的一半提供者升級(jí)為新版本。

回聲測(cè)試

回聲測(cè)試用于檢測(cè)服務(wù)是否可用,回聲測(cè)試按照正常請(qǐng)求流程執(zhí)行,能夠測(cè)試整個(gè)調(diào)用是否通暢,可用于監(jiān)控。
所有服務(wù)自動(dòng)實(shí)現(xiàn)EchoService接口,只需將任意服務(wù)引用強(qiáng)制轉(zhuǎn)型為EchoService 即可使用,使用方式(demoService是spring管理的bean)

EchoService echoService = (EchoService) demoService;System.out.println(echoService.$echo("hello"));

隱式參數(shù)

可以通過(guò) RpcContext 的 setAttachment() 和 getAttachment() 在Consumer和Provider之間進(jìn)行參數(shù)的隱式傳遞,例如Controller層攔截登錄token,把根據(jù)token得到的memberId傳給dubbo服務(wù)就能使用隱式參數(shù)傳遞的方式,setAttachment()設(shè)置的 KV 對(duì),在完成一次遠(yuǎn)程調(diào)用會(huì)被清空,即多次遠(yuǎn)程調(diào)用要多次設(shè)置。使用方式:

1.服務(wù)端set:

RpcContext.getContext().setAttachment("CRT_MEMBER_ID", "13828886888");

2.客戶(hù)端get:

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

上下文

上下文中存放的是當(dāng)前調(diào)用過(guò)程中所需的環(huán)境信息。所有配置信息都將轉(zhuǎn)換為 URL 的參數(shù)
RpcContext 是一個(gè) ThreadLocal 的臨時(shí)狀態(tài)記錄器,當(dāng)接收到 RPC 請(qǐng)求,或發(fā)起 RPC 請(qǐng)求時(shí),RpcContext 的狀態(tài)
都會(huì)變化。例如:A 調(diào) B,B 再調(diào) C,則 B 機(jī)器上,在 B 調(diào) C 之前,RpcContext 記錄的是 A 調(diào) B 的信息,在 B 調(diào) C
之后,RpcContext 記錄的是 B 調(diào) C 的信息。使用方式:

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

本地偽裝

本地偽裝通常用于服務(wù)降級(jí),例如某驗(yàn)權(quán)服務(wù),當(dāng)服務(wù)提供方全部掛掉后,客戶(hù)端不拋出異常,而是通過(guò) Mock 數(shù)據(jù)
返回授權(quán)失敗。使用方式如下,mock指定的實(shí)現(xiàn)類(lèi)在Provider拋出RpcException異常時(shí)執(zhí)行(一定要拋出RpcException異常才執(zhí)行),取代遠(yuǎn)程返回結(jié)果:

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

DemoServiceMock實(shí)現(xiàn)源碼:

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

泛化調(diào)用

泛化接口調(diào)用方式主要用于客戶(hù)端沒(méi)有 API 接口及模型類(lèi)元的情況,參數(shù)及返回值中的所有 POJO 均用Map表示,通常用于框架集成,例如:實(shí)現(xiàn)一個(gè)通用的服務(wù)測(cè)試框架,可通過(guò)GenericService調(diào)用所有服務(wù)實(shí)現(xiàn)。使用方式:

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

調(diào)用源碼:

/** * @author afei * @version 1.0.0 * @since 2017年11月22日 */public class Main {     public static void main(String[] args) {        // 引?遠(yuǎn)程服務(wù), 該實(shí)例??封裝了所有與注冊(cè)中?及服務(wù)提供?連接,請(qǐng)緩存        ReferenceConfig<GenericService> reference = new ReferenceConfig<GenericService>();        // 弱類(lèi)型接?名        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();        // 基本類(lèi)型以及Date,List,Map等不需要轉(zhuǎn)換,直接調(diào)?        Object result = genericService.$invoke("sayYes", new String[] {"JAVA.lang.String"}, new Object[] {"afei"});        System.out.println("result --> "+result);         // ?Map表示POJO參數(shù),如果返回值為POJO也將自動(dòng)轉(zhuǎn)成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", "測(cè)試");        // 如果返回POJO將自動(dòng)轉(zhuǎn)成Map        result = genericService.$invoke("justTest", new String[]                {"com.alibaba.dubbo.demo.bean.HighTeacher"}, new Object[]{teacher});        System.out.println("result --> "+result);    }}

訪問(wèn)日志

如果想記錄每次請(qǐng)求信息,可開(kāi)啟訪問(wèn)日志,類(lèi)似于Ngnix的訪問(wèn)日志。注意:此日志量比較大,請(qǐng)注意磁盤(pán)容量。使用方式(如果配置局部,全局訪問(wèn)日志就會(huì)失效):
配置全局:

<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"]

延遲暴露

如果服務(wù)需要預(yù)熱時(shí)間,比如初始化本地緩存,等待相關(guān)資源就位等,可以使用delay進(jìn)行延遲暴露。使Dubbo在Spring容器初始化完后延遲多少毫秒再暴露服務(wù)。使用方式:

<dubbo:provider delay="5000"/>

或者:

<dubbo:service delay="5000" interface="com.alibaba.dubbo.demo.DemoService" ref="demoService" version="1.0.0"/>
轉(zhuǎn)載自:https://mp.weixin.qq.com/s/peBTzuAX5d1UtXc0sYkTtg

分享到:
標(biāo)簽:框架 Dubbo
用戶(hù)無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定