使用 Spring AMQP Request/Reply 保留 MDC

Retaining MDC with Spring AMQP Request/Reply

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

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

我已经扩展了 SimpleMessageConverter 以便设置一个包含 UUID 的 AMQP header,但我似乎并没有真正弄清楚 how/where 来填充和 how/where 清除 B 中的 MDC。有人能解释一下吗?

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

fromMessage() 中设置 MDC(来自 header),在回复映射时清除它(在 toMessage 中)。