Tracer 除了通过生成日志将各个中间件的日志串起来的能力之外,还可以将上游应用的数据直接通过 Tracer 带到下游应用。
这部分能力不同于 RPC 或者动态配置,需要在接口中对需要传递的数据进行声明,Tracer 的跨应用传递数据的能力只需要调用 Tracer 的 API 即可。
假设在 A 应用的某段代码中,要通过 Tracer 将一个应用传递给所有涉及到的下游系统,那么可以调用 Tracer 设置穿透数据(穿透数据是 Tracer 中跨系统传递的数据)的 API。将需要传递的数据在 Tracer 中进行定义,其中第一个参数是穿透数据的 key,后面是穿透数据的 value:
TracerContextUtil.putPenetrateAttribute("Hello", "World");
当下游应用 B 在处理 A 发过来的 RPC 请求或 MsgBroker 消息时,就可以通过以下方法来获取 A 设置到 Tracer 中的穿透数据:
TracerContextUtil.getPenetrateAttribute("Hello");
其中,传入的参数是穿透数据的 key(即上例中的 Hello)。
注意:
- Tracer 中所有穿透数据的都是以字符串形式进行传递,不支持其他类型的数据。
- 当加入该穿透数据,如果整体穿透数据量超过了最大的限制(目前最大的限制为 1024 个字符),当前应用会抛出异常(TracerException),会导致线程运行失败。
- Tracer 中的穿透数据会通过穿透数据系统一直扩散至请求涉及到的所有系统,如果仅仅涉及两个系统的调用,不建议使用此功能。
- Tracer 中穿透数据的 key 必须保证全局唯一(使用时务必保证不和其他应用冲突)。因此,Tracer 中保留关键 key 有 UID 和 mark 的两个字段。
原创文章,作者:网友投稿,如若转载,请注明出处:https://www.cloudads.cn/archives/33401.html