当我的消息未传递给RabbitMQ服务器时,我正在使用hystrix来处理falback场景。当RabbitMQ服务器关闭时(因为抛出AMQPException),我的后备将被调用。
如果broker无法接受/路由消息,则调用returnCallback / returnConfirm(使用nack)。
我的理解是RabbitTemplate returnCallbacks / returnConfirms将在与Hystrix线程不同的线程中执行。
是否可以在这些场景中抛出异常,以便执行Hystrix后备?
我已经提到了这些问题:Spring AMQP return callback vs retry callback
Spring RabbitTemplate- How to get hold of the published message for NACKs in Publisher confirm mode
非常感谢任何处理此场景的指针。
答案 0 :(得分:1)
没有;返回是完全异步的;即使您启用了交易 - 来自the rabbit mq documentation ...
AMQP未指定何时应检测到transactional basic.publish和basic.ack命令中的错误(例如,缺少权限,对未知交换的引用)。 RabbitMQ立即执行必要的检查(而不是在提交时执行),但请注意basic.publish和basic.ack都是异步命令,因此任何错误都将异步报告给客户端。
如果您发布到不存在的交换(和setChannelTransacted(true)
*),您将在提交时获得异常,但发布到没有可路由队列的交换将永远不会得到异常(只有异步返回回调) )。