全部產品
Search
文件中心

Enterprise Distributed Application Service:調用上下文

更新時間:Jun 30, 2024

請求上下文包括一次調用相關的屬性,例如調用的地址,調用方的應用程式名稱,逾時時間等屬性和使用者在介面定義的參數之外傳遞自訂的資料。

設定和擷取本次調用上下文

com.taobao.hsf.util.RequestCtxUtil提供設定和擷取調用內容相關的靜態方法,基於ThreadLocal工作, getxxx操作會將xxx屬性從當前ThreadLocal變數中remove,僅作用於當前線程的單次調用。

具體屬性的設定和擷取如下:

  • 用戶端
    方法說明
    setRequestTimeout()設定單次調用的逾時時間。
    setUserId()設定本次調用的單元化服務的User ID(泛化調用中需要通過此方法配置)。
    getProviderIp()擷取最近一次調用的服務端的IP。
    setTargetServerIp(String ip)設定當前線程下一次調用的目標伺服器IP(此IP必須包含在記憶體已提供服務的地址清單裡)。
    setDirectTargetServerIp(String targetIp)設定當前線程下一次調用的目標伺服器IP(繞過註冊中心,忽略記憶體裡的地址清單)。
  • 服務端
    方法說明
    getClientIp()服務端擷取調用方IP。
    getAppNameOfClient()服務端擷取調用方的應用程式名稱。
    isHttpRequest()是否是HTTP調用。
    getHttpHeader(String key)擷取HTTP請求的Header屬性。

傳遞自訂請求上下文

RpcContext 提供一種不修改介面,向服務端額外傳遞資料的方式。參數可以是自訂的DO或者基本類型。要保證對端也有該對應的類型,並且可以能夠被序列化。

  • 用戶端發起調用前,設定上下文。
    //setup context before rpc call
    RPCContext rpcContext = RPCContext.getClientContext();
    rpcContext.putAttachment("tetantId", "123");
    
    //rpc call,context 也會傳到遠端
     orderService.queryOrder(1L);
  • 服務端業務方法內,擷取上下文。
    //get context data
    RPCContext rpcContext = RPCContext.getServerContext();
    String myContext = (String)rpcContext.getAttachment("tetantId");