当使用http调用其他k8s服务时,我希望将从我的Nginx接收到的X-Request-Id
传递给其他服务。
目前,我正在使用请求过滤器来捕获X-Request-Id
头,并将其放入MDC中。
final String nginxRequestId = requestContext.getHeaderString("X-Request-Id");
if (nginxRequestId != null) {
MDC.put("infra_request", nginxRequestId);
}
现在,我正在k8s中调用服务B的端点(因此没有Nginx阻塞),并希望获取X-Request-Id
以将其放入请求头中。这里有两个选项:
- 直接从MDC获取该值
- 将该标头存储在线程本地变量中(因为服务使用Dropwizard),除了将其存储在MDC中
我可能会使用MDC来完成它,但我不确定这是否是最佳实践,或者是否存在一些问题。
MDC
使用了ThreadLocal
,您从额外的ThreadLocal
中将获得什么优势?只需确保在之后清理您的MDC
。 - Kayaman