【问题标题】:Retaining MDC with Spring AMQP Request/Reply使用 Spring AMQP 请求/回复保留 MDC
【发布时间】:2015-06-23 16:17:54
【问题描述】:

我有两个服务,A 和 B,通过 Spring Remoting with AMQP 进行通信。 A 在每个请求上公开一个 REST API 并使用 UUID.randomUUID()(来自 Filter)填充 MDC(映射诊断上下文)(并在处理完成时将其清除)。现在我想在请求/回复周期中将此 UUID 传递给 B,以便...

  1. ...当 B 中的消费者开始处理请求时,其 MDC 将填充 UUID。
  2. ...当 B 中的消费者处理完请求后,其 MDC 被清除。

我已经扩展 SimpleMessageConverter 以便设置一个包含 UUID 的 AMQP 标头,但我似乎并没有真正弄清楚如何/在哪里填充以及如何/在哪里清除 B 中的 MDC。任何人都可以请有什么启示?

【问题讨论】:

标签: spring logging correlation spring-amqp mdc


【解决方案1】:

将另一个自定义消息转换器注入AmqpInvokerServiceExporter

fromMessage() 中设置MDC(来自标头),在映射回复时将其清除(在toMessage 中)。

【讨论】:

  • 经过一些研究,我发现我可以用#SimpleMessageListenerContainer.setAdviceChain 注入MethodInterceptor,这基本上可以做到这一点。您认为这两种方法中哪一种更可取?
  • 是的,这也可以。由于您需要在发送端使用自定义转换器,因此在接收端使用转换器对我来说似乎更对称。其他开发人员(稍后可能会来您的项目)也可能更容易理解。但是,从功能上讲,并没有什么区别,所以我真的没有办法磨刀。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-24
  • 1970-01-01
  • 1970-01-01
  • 2013-04-17
  • 1970-01-01
相关资源
最近更新 更多