請求上下文包括一次調用相關的屬性,例如調用的地址,調用方的應用名,超時時間等屬性和用戶在接口定義的參數之外傳遞自定義的數據。
設置和獲取本次調用上下文
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");
文檔內容是否對您有幫助?