调用上下文

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

路由寻址链路,例如 TURL>CFS>RDM,表示路由寻址路径是从 test-url 到软负载到随机寻址。如果上次请求的路由策略是 test-url,则 routeRecord 等于 TURL>RDM

如要判断 test-url 或者软负载是否生效,请使用 RpcReferenceContext.isTestUrlValid 或者 RpcReferenceContext.isConfigServerValid 方法。详细的路由规则,请参见 RPC 路由

costTime

调用耗时,单位为 ms。

resultCode

结果码,取值如下:

  • 00:表示成功。

  • 01:表示业务异常。

  • 02:表示 RPC 框架错误。

  • 03:表示出现超时失败错误。

  • 04:表示路由失败。

Service

参数

说明

traceId

Trace ID 名称。

rpcId

RPC ID 名称。

methodName

服务方法。

serviceName

唯一的服务名。

callerAppName

服务消费方的应用名。

callerUrl

服务消费方的地址。

更多信息,请参见 SOFARPC 日志