2016-09-14 107 views
1

当我的邮件没有传递到RabbitMQ服务器时,我正在使用hystrix来处理falback场景。当RabbitMQ服务器关闭时(因为引发AMQPException),我的回退被调用。 如果代理无法接受/路由消息,则调用returnCallback/returnConfirm(带有nack)。
我的理解是,RabbitTemplate returnCallbacks/returnConfirms将在不同于Hystrix线程的线程中执行。Spring AMQP:[RabbitTemplate]当RabbitTemplate ReturnCallback被执行时,Hystrix回退没有被调用

是否有可能在这些情况下抛出异常,以便Hystrix fallback得到执行?

我刚才提到这些Q记者: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

相关问题