Spring Boot 耐受性4j:执行重试时丢失MDC上下文和correlationId HTTP标头

m1m5dgzv  于 2023-03-18  发布在  Spring
关注(0)|答案(1)|浏览(233)

FeignSpring reactive WebClientHTTP客户端上执行重试时遇到问题。我们正在HTTP请求的标头中设置correlationId(使用带有Feign的拦截器或带有Spring reactive WebClient的过滤器),并且一切正常(我们保留并从SLF4J的MDC获取correlationId,但是当重试机制执行重试调用时,因为重试正在执行不同的线程,我们正在丢失MDC上下文。
因为我们无法控制Resilence4j线程池,所以无法在这些线程中传播MDC上下文。是否有办法传播MDC,创建自定义TaskExecutor,并在Retryer线程池中设置TaskDecorator?
这是预期行为还是我遗漏了什么?
我们正在使用:
弹性4j版本:3.0.2 Java版本:17
先谢谢你
我们尝试在HTTP请求的头中设置correlationId(使用带有Feign客户端的拦截器或带有Spring reactive WebClient的过滤器)。
我们希望使用resilence4j保持和设置MDC上下文以及重试之间的correlationId

iszxjhcz

iszxjhcz1#

我遇到了同样的问题,我通过添加maven依赖项并将application.yml中的自定义属性添加到断路器库中来解决它。application.yml

resilience4j:
  scheduled:
    executor:
      corePoolSize: 10
      maxPoolSize: 2000
      queueSize: 500
      contextPropagators:
        - io.github.resilience4j.test.TestContextPropagators.TestThreadLocalContextPropagatorWithHolder

Maven依赖项为

<dependency>
        <groupId>io.github.resilience4j</groupId>
        <artifactId>resilience4j-test</artifactId>
        <version>1.7.0</version>
    </dependency>

相关问题