java - Spring cloud sleuth ExtraFieldPropagation在Spring cloud Gateway Filter中失败
问题描述
我们有三个Gateway
使用spring-cloud-gateway
,Service1
和的模块Service2
。网关呼叫service1
和service1
呼叫service2
。Service1
并且Service2
正在使用 spring web Flux Gateway 有 3 个过滤器。全局过滤器、前置过滤器和后置过滤器。
spring:
cloud:
gateway:
default-filters:
- name: GlobalFilter
routes:
id: service1
uri: http://localhost:9091/
predicates:
- Path=/service1/**
filters:
- name: PreFilter
- name: PostFilter
在全局过滤器中,我们从设置为新行李键的请求正文设置中读取值。
ExtraFieldPropagation.set(tracer.currentSpan().context() ,X-CUST_TRAN_ID, transactionID);
我们还设置了如下所示的 Slueth 属性,以便将其打印在日志中并转发到下一个服务(service1
和service2
)
sleuth:
baggage-keys:
- X-CUST_TRAN_ID
log:
slf4j:
whitelisted-mdc-keys:
- X-CUST_TRAN_ID
我们面临的问题是
X-CUST_TRAN_ID
值通过请求和响应发送并打印在service1
andservice2
的日志中,但Gateway
本身不打印。
它不会在GlobalFilter
's 的日志或PreFilter
日志语句中打印,而是在PostFilters
日志语句中打印。由于CUST_TRAN_ID
设置在GlobalFilter
's 过滤器中,它应该在设置为上下文后打印在日志语句中。
请帮助以更好的方式设置传播字段以及在日志语句中打印。
解决方案
Sleuth 使用它自己的具有默认顺序的过滤器初始化它的上下文。您可以尝试使用以下属性为 sleuth 过滤器提供最高优先级:
spring:
sleuth:
web:
filter-order: -2147483648
推荐阅读
- python - 如何从列表python中删除字符串
- php - 通过 PHP 和 AJAX 上传 PDF 文件时出现未定义的索引错误
- git - 在谷歌驱动器上上传一个 git 存储库
- python - 按列(对象)分层拆分
- java - maven 依赖项在编译期间工作,但在运行时失败 java.lang.NoClassDefFoundError & java.lang.ClassNotFoundException
- distance - 如何在 NetLogo 中跟踪海龟到达世界边界后的坐标?
- c# - 在 .NET Core 应用程序中使用 NEST 在 ElasticSearch 的正确索引路径内进行批量收集
- dart - 解析列表
- > 列出
在飞镖/颤振中 - c# - 除非在紧密循环中,否则 C# 扩展方法比链式替换慢。为什么?
- javascript - 为什么这个javascript只替换一次html元素?