全部产品

调用上下文

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 中获得,参见 RPC 日志格式 了解更多信息。

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:服务消费方的地址。