RPC 上下文中存放了当前调用过程中的一些其他信息,如服务提供方应用名、IP。应用开发人员可以获取这些信息做一些业务上的操作。
RPC 提供获取单次调用上下文的工具类 com.alipay.sofa.rpc.api.context.RpcContextManager
,您可以通过该类获得最后一次 Reference 以及当次 Service 的相关信息。
RPC 上下文是存放在 ThreadLocal
中的临时数据,切换线程或者清空 ThreadLocal
后数据都将丢失。
使用方式
// Reference Context
SampleService sampleService;
public void do(){
sampleService.hello();
// 参数为 true 代表清空上下文信息。
RpcReferenceContext referenceContext =RpcContextManager.lastReferenceContext(true);
// do something on referenceContext
}
// Service Context
public void doService(){
// do sth
...
// 参数为 true 代表清空上下文信息。
RpcServiceContext serviceContext =RpcContextManager.currentServiceContext(true);
// do something on serviceContext
...
}
上下文内容
RPC 上下文的信息均是从 Tracer 中获得,包含如下内容:
Reference
参数 | 说明 |
traceId | Trace ID 名称。 |
rpcId | RPC ID 名称。 |
interfaceName | 服务接口。 |
methodName | 服务方法。 |
uniqueId | 服务的唯一标识。 |
serviceName | 唯一的服务名。 |
isGeneric | 是否为泛化调用。 |
targetAppName | 服务提供方的应用名。 |
targetUrl | 服务提供方的地址。 |
protocol | 调用协议,例如 TR。 |
invokeType | 调用类型,例如 sync、oneway 等。 |
routeRecord | 路由寻址链路,例如 如要判断 |
costTime | 调用耗时,单位为 ms。 |
resultCode | 结果码,取值如下:
|
Service
参数 | 说明 |
traceId | Trace ID 名称。 |
rpcId | RPC ID 名称。 |
methodName | 服务方法。 |
serviceName | 唯一的服务名。 |
callerAppName | 服务消费方的应用名。 |
callerUrl | 服务消费方的地址。 |
更多信息,请参见 日志说明。