最近遇到的需求是 php端调用 spring cloud 提供的http 接口。 需要把php端的生成的trackid 透传到spring cloud。
1. 了解MDC:https://logback.qos.ch/manual/mdc.html
其实就是把自定义属性放入MDC, 然后在logback 里面用设置 %X{自定义属性名字} 就能打印出来。
2. 了解spring cloud trackid 透传原理
1. springcloud 有一个前置filter, 目的从request header 获取X-Span-Export;X-B3-ParentSpanId;X-B3-TraceId;X-B3-SpanId 这个4个熟悉, 如果没有值的话 就自动生成, 然后放入trackcontext,接着从trackcontext获取属性放入 MDC
2.在处理自己的业务逻辑的时候, 就打印放入MDC 里面的自定义属性。
3.业务逻辑处理结束后, 有一个后置拦截器。从trackcontext把属性获取出来放入request header。 传入下一个请求。就这样下一个请求也从步骤一开始, 从header 获取相关属性。
要解决php trackid 透传到spring cloud。方案有两种
第一种:
创建一个filter, 过滤前段请求, 获取来自php端 traceidFromPHP, 然后放入MDC。
创建一个ClientHttpRequestInterceptor。从MDC拿出traceidFromPHP 放入Request header 。
第二种方案:
PHP 兼容spring cloud, 在调用spring cloud 接口的时候,直接把X-Span-Export;X-B3-ParentSpanId;X-B3-TraceId;X-B3-SpanId 放入header 即可。注意 名字要一模一样, 生成id的策略要和spring cloud 一直。php 应该有对应的组件。
网友评论