Сохранение MDC с запросом/ответом Spring AMQP

У меня есть две службы, A и B, которые обмениваются данными через Удаленное взаимодействие Spring с помощью AMQP. A предоставляет REST API и заполняет MDC (сопоставленный диагностический контекст) UUID.randomUUID() (из Filter) при каждом запросе (и очищает его по завершении обработки). Теперь я хотел бы передать этот UUID в B в цикле запроса/ответа, чтобы...

  1. ... когда потребитель в B начинает обрабатывать запрос, его MDC заполняется UUID.
  2. ... когда потребитель в B завершает обработку запроса, его MDC очищается.

Я расширил SimpleMessageConverter, чтобы установить заголовок AMQP, содержащий UUID, но, похоже, я действительно не понимаю, как/где заполнить и как/где очистить MDC в B. Кто-нибудь может пролить свет?


person Roy Stark    schedule 23.06.2015    source источник
comment
Извините: что такое MDC?   -  person Artem Bilan    schedule 23.06.2015
comment
Это сопоставленный диагностический контекст. Извините, конечно, должно было быть более ясно. logback.qos.ch/manual/mdc.html   -  person Roy Stark    schedule 23.06.2015


Ответы (1)


Вставьте еще один пользовательский преобразователь сообщений в файл AmqpInvokerServiceExporter.

Установите MDC (из заголовка) в fromMessage(), очистите его при отображении ответа (в toMessage).

person Gary Russell    schedule 23.06.2015
comment
После некоторых исследований я обнаружил, что могу внедрить MethodInterceptor в #SimpleMessageListenerContainer.setAdviceChain, что в основном и делает. Какой из двух подходов вы считаете предпочтительным? - person Roy Stark; 23.06.2015
comment
Да, это тоже сработает. Поскольку вам нужен собственный конвертер на стороне отправки, мне кажется более симметричным использовать конвертер и на стороне получателя. Другим разработчикам (которые могут присоединиться к вашему проекту позже) может быть проще это понять. Но с функциональной точки зрения особой разницы нет, так что мне особо не о чем беспокоиться. - person Gary Russell; 23.06.2015