Dubbo3 上下文信息

2022-03-31 11:51 更新

通過上下文存放當(dāng)前調(diào)用過程中所需的環(huán)境信息

上下文中存放的是當(dāng)前調(diào)用過程中所需的環(huán)境信息。所有配置信息都將轉(zhuǎn)換為 URL 的參數(shù),參見 schema 配置參考手冊 中的對應(yīng)URL參數(shù)一列。

RpcContext 是一個(gè) ThreadLocal 的臨時(shí)狀態(tài)記錄器,當(dāng)接收到 RPC 請求,或發(fā)起 RPC 請求時(shí),RpcContext 的狀態(tài)都會變化。比如: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 的信息。

服務(wù)消費(fèi)方

// 遠(yuǎn)程調(diào)用
xxxService.xxx();
// 本端是否為消費(fèi)端,這里會返回true
boolean isConsumerSide = RpcContext.getContext().isConsumerSide();
// 獲取最后一次調(diào)用的提供方IP地址
String serverIP = RpcContext.getContext().getRemoteHost();
// 獲取當(dāng)前服務(wù)配置信息,所有配置信息都將轉(zhuǎn)換為URL的參數(shù)
String application = RpcContext.getContext().getUrl().getParameter("application");
// 注意:每發(fā)起RPC調(diào)用,上下文狀態(tài)會變化
yyyService.yyy();

服務(wù)提供方

public class XxxServiceImpl implements XxxService {
 
    public void xxx() {
        // 本端是否為提供端,這里會返回true
        boolean isProviderSide = RpcContext.getContext().isProviderSide();
        // 獲取調(diào)用方IP地址
        String clientIP = RpcContext.getContext().getRemoteHost();
        // 獲取當(dāng)前服務(wù)配置信息,所有配置信息都將轉(zhuǎn)換為URL的參數(shù)
        String application = RpcContext.getContext().getUrl().getParameter("application");
        // 注意:每發(fā)起RPC調(diào)用,上下文狀態(tài)會變化
        yyyService.yyy();
        // 此時(shí)本端變成消費(fèi)端,這里會返回false
        boolean isProviderSide = RpcContext.getContext().isProviderSide();
    } 
}


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號