2016-09-14 3 views
1

Я использую hystrix для обработки сценариев фолк-бэка, когда мои сообщения не доставляются на сервер RabbitMQ. Мой резервный вызов вызывается, когда сервер RabbitMQ недоступен (по мере того, как выдается AMQPException). Если брокер не может принимать/маршрутизировать сообщения, тогда возвращается returnCallback/returnConfirm (с nack).
Я понимаю, что RabbitTemplate returnCallbacks/returnConfirms будет выполняться в другом потоке, чем поток Hystrix.Spring AMQP: [RabbitTemplate] Hystrix fallback не запускается, когда выполняется RabbitTemplate ReturnCallback.

Можно ли исключить исключение в этих сценариях, чтобы выполнить резерв Hystrix?

Я передал их д-х: Spring AMQP return callback vs retry callback

Spring RabbitTemplate- How to get hold of the published message for NACKs in Publisher confirm mode

Любой указатель обрабатывать этот сценарий очень ценится.

ответ

1

Нет; возвраты полностью асинхронны; даже если включить транзакции - от the rabbit mq documentation ...

AMQP не указует, когда ошибки (например, отсутствие разрешений, ссылки на неизвестные биржи) в транзакционных командах basic.publish и basic.ack должны быть обнаружены. RabbitMQ выполняет необходимые проверки немедленно (а не, скажем, во время фиксации), но обратите внимание, что как basic.publish, так и basic.ack являются асинхронными командами, поэтому любые ошибки будут сообщаться обратно клиенту асинхронно.

Если вы публикуете на несуществующий обмен (и setChannelTransacted(true) *) вы получите исключение на коммит, но публикации на биржу, без маршрутизируемой очереди никогда не получишь исключение (только возврат асинхронного обратный вызов) ,

  • позволяет транзакции довольно дорого для всех операций таким образом рассмотреть его внимательно, если вы хотите, чтобы поймать этот конкретный сценарий
+0

Эта информация действительно полезна. Спасибо за эту ценную информацию. – Shishir