此问题是 SO 问题的扩展,Spring Integration 将 ReactorContext 恢复为命令式处理
通过 WebFlux 调用后抛出的任何异常WebFluxRequestExecutingMessageHandler
都缺少Trace
信息。
描述该问题的示例可在https://github.com/syedyusufh/simple-handle-reactive.git上找到
这就是正在发生的事情。
- WebFlux 调用已完成,但响应中存在业务错误。
- Transformer 尝试将响应转换为 Object,然后查找任何业务错误,如果是,则抛出用户定义的错误。
WebFluxRequestExecutingMessageHandler
首先抛出的这个异常会通过上下文丢失的地方自动记录- 然后异常被转发到应用程序定义的errorChannel,它会创建一个新的traceId
例外:
2m2024-06-24T20:27:02.445+04:00 INFO 1436 --- [ scheduling-1] [66799e5608c967d694f450b82077c38c-fadc3f15d16b6b11] c.i.sample.config.TracingConfig : Request Headers: [Content-Type:"application/json", traceparent:"00-66799e5608c967d694f450b82077c38c-fadc3f15d16b6b11-00"]
2024-06-24T20:27:03.997+04:00 INFO 1436 --- [ctor-http-nio-3] [66799e5608c967d694f450b82077c38c-fadc3f15d16b6b11] c.i.sample.config.TracingConfig : Response Headers: [Access-Control-Allow-Origin:"*", Alt-Svc:"h3=":443"; ma=2592000", Content-Type:"application/json", Date:"Mon, 24 Jun 2024 16:27:05 GMT", Server:"Caddy", Vary:"Accept-Encoding", Transfer-Encoding:"chunked"]
2024-06-24T20:27:04.089+04:00 ERROR 1436 --- [oundedElastic-1] [ ] .o.WebFluxRequestExecutingMessageHandler : Failed to send async reply: org.springframework.integration.support.MessageBuilder@5e1691b0
不要将该异常抛回 WebFlux 通道适配器的线程。考虑手动处理或通过以下方式处理
ExpressionEvaluatingRequestHandlerAdvice
:https://docs.spring.io/spring-integration/reference/handler-advice/classes.html#expression-advice