使用spring amqp(rabbitmq):
我的消费者需要花费大量时间来处理消息,有时候我的业务逻辑需要2个多小时,但是当我尝试确认rabbitmq为“basic ack”时,它会抛出连接超时异常。
我该怎么办?我应该永远保持连接还是使用心跳?
答案 0 :(得分:0)
如果您的逻辑肯定是基于MANUAL ack,那么除非让您的关系长期存在,否则您确实无法做出选择。无论如何,心跳应默认存在。
否则考虑使用AUTO ack的解决方案,如果在下游发生错误,只需将消息发送回队列以便将来重新安装。
答案 1 :(得分:0)
在您的长期业务运营开始之后立即考虑一个替代选项,然后通知其状态:失败或成功,如果您有任何依赖行为者。
作为Artem& Gary建议长时间保持消息是一种非常反模式,你可能想让这个过程真的异步 - 你的服务消耗了一条消息并开始做一些事情:那么好吧,让我们做一些事情。承认这一点。如果您需要重复失败,只需在出现故障时发出单独的消息,以便另一个消费者接受并处理它。