Spring AMQP:[RabbitTemplate]执行RabbitTemplate ReturnCallback时不会调用Hystrix回退

时间:2016-09-14 00:38:33

标签: java spring spring-amqp hystrix

当我的消息未传递给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

非常感谢任何处理此场景的指针。

1 个答案:

答案 0 :(得分:1)

没有;返回是完全异步的;即使您启用了交易 - 来自the rabbit mq documentation ...

  

AMQP未指定何时应检测到transactional basic.publish和basic.ack命令中的错误(例如,缺少权限,对未知交换的引用)。 RabbitMQ立即执行必要的检查(而不是在提交时执行),但请注意basic.publish和basic.ack都是异步命令,因此任何错误都将异步报告给客户端。

如果您发布到不存在的交换(和setChannelTransacted(true) *),您将在提交时获得异常,但发布到没有可路由队列的交换将永远不会得到异常(只有异步返回回调) )。

  • 启用所有操作的交易都非常昂贵,因此如果您想要捕捉这一特定情景,请仔细考虑