Spring Cloud 侦探 ExtraFieldPropagation 在 Spring 云网关筛选器中失败



我们有三个模块Gateway使用spring-cloud-gatewayService1Service2。 网关呼叫service1service1呼叫service2Service1Service2正在使用弹簧腹板助焊剂 网关有 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 属性,以便将其打印在日志中并转发到下一个服务(service1service2

sleuth: 
baggage-keys: 
- X-CUST_TRAN_ID
log:
slf4j:
whitelisted-mdc-keys:
- X-CUST_TRAN_ID

我们面临的问题是

X-CUST_TRAN_ID值通过请求和响应发送,并打印在service1service2的日志中,但不打印在Gateway本身中。

它不会打印在GlobalFilter的日志或PreFilter日志语句中,而是打印在PostFilters日志语句中。由于CUST_TRAN_ID是在GlobalFilter的过滤器中设置的,因此在设置为上下文后,它应该打印在日志语句中。

请帮助是否有更好的方法来设置传播字段以及在日志语句中打印。

侦探使用自己的过滤器初始化其上下文,该过滤器具有默认顺序。 您可以尝试使用以下属性为侦探过滤器提供最高优先级:

spring:
sleuth:
web:
filter-order: -2147483648

最新更新