全部产品

调用上下文

更新时间:2020-02-18 16:40:49

RPC 上下文中存放了当前调用过程中的一些其他信息,如服务提供方应用名、IP。应用开发人员可以获取这些信息做一些业务上的操作。RPC 提供获取单次调用上下文的工具类 com.alipay.sofa.rpc.api.context.RpcContextManager,通过该类,可以获得最后一次 Reference 以及当次 Service 的相关信息。

需要注意的是,RPC 上下文是存在 ThreadLocal 中的临时数据,切换线程或者清空 ThreadLocal 后数据都将丢失。

使用方式

  1. // Reference Context
  2. SampleService sampleService;
  3. public void do() {
  4. sampleService.hello();
  5. // 参数为 true 代表清空上下文信息
  6. RpcReferenceContext referenceContext = RpcContextManager.lastReferenceContext(true);
  7. // do something on referenceContext
  8. }
  1. // Service Context
  2. public void doService() {
  3. // do sth
  4. ...
  5. // 参数为 true 代表清空上下文信息
  6. RpcServiceContext serviceContext = RpcContextManager.currentServiceContext(true);
  7. // do something on serviceContext
  8. ...
  9. }

上下文内容

RPC 上下文的信息均是从 Tracer 中获得,参见 RPC 日志格式 了解更多信息。

Reference

  • traceId
  • rpcId
  • 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
  • rpcId
  • methodName:服务方法
  • serviceName:唯一的服务名
  • callerAppName:服务消费方的应用名
  • callerUrl:服务消费方的地址