Определите набор очередей (очередь отладки A – Z) и привяжите их к обмену заголовками с атрибутами x-match=any, from=[A-Z], to=[A-Z]
соответственно. Затем привяжите заголовки обмениваться на ваш основной рабочий обмен (одно или несколько), чтобы получать все интересующие вас сообщения, поэтому, когда ваш потребитель публикует ответ, он будут скопированы на ваш обмен данными отладки, а затем перенаправлены в соответствующую очередь.
[sender X] [ worker ] [consumer on queue X]
| ^ |
[request] | [response from=X, to=X] [duped request from=X|
\ | | [duplicated response from=X, to=X]
\ [request from=X] | ^
v | V |
[working topic exchange] -------> [debug headers exchange]
/ | \ / | \
{bindings by routing key mask} {bindings by any headers from=[A-Z], to=[A-Z]}
/ | \ / | \
[working queue 1] ... [working queue N] [debug queue A] ... [debug queue Z]
Для привязки сообщений запроса и ответа вы можете использовать атрибуты сообщения applicationId
и correlationId
.
Обратите внимание, что сообщения запроса и ответа будут дублироваться в очереди отладки. Вы также можете указать отдельную очередь для сообщений запроса и ответа, привязав очереди к соответствию только определенным заголовкам, например x-match=all, from=[A-Z]
или x-match=all, to=[A-Z]
, и публиковать ответы и сообщения запроса только с этими заголовками (только from
или только to
), но это зависит от вас.
Плюсы:
- легко реализовать
- требует минимальных изменений кода
- легко включить / выключить
- можно безопасно запускать в производственной среде
Минусы:
- использовать больше ресурсов со стороны RabbitMQ
В качестве альтернативы вы можете каким-то образом использовать шаблон RPC, если процесс отладки требует ответа в реальном времени. получение. Но это заблокирует издателя до тех пор, пока ответ не будет обработан, что может отличаться от реального использования приложения и нарушить бизнес-логику.
Плюсы:
- пошаговый процесс отладки
Минусы:
- сложно реализовать
- может потребоваться много изменений кода
- нарушить бизнес-логику
- сложно включить / отключить
- небезопасная производственная среда
p.s .: извините за график ascii
person
pinepain
schedule
27.12.2013