请求上下文包括一次调用相关的属性,例如调用的地址,调用方的应用名,超时时间等属性和用户在接口定义的参数之外传递自定义的数据。
设置和获取本次调用上下文
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");
文档内容是否对您有帮助?