请求上下文包括一次调用相关的属性,列如调用的地址,调用方的应用名,超时时间等属性和用户在接口定义的参数之外传递自定义的数据。
设置和获取本次调用上下文
com.taobao.hsf.util.RequestCtxUtil 提供设置和获取调用上下文的静态方法,基于 ThreadLocal 工作, getXXX 操作会将 XXX 属性从当前 ThreadLocal 变量中 remove ,仅作用于当前线程的单次调用。具体属性的设置和获取如下。
客户端
方法 | 说明 |
---|---|
setRequestTimeout() | 设置单次调用的超时时间 |
setUserId() | 设置本次调用的单元化服务的 userId(泛化调用中需要通过此方法配置) |
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");
在文档使用中是否遇到以下问题
更多建议
匿名提交