我有一个从 RabbitMQ 队列接收订单的业务流程。我正在考虑不确认它(意思是,将它留在队列中)可能很长时间(> 10分钟),然后才删除它(确认)或不删除它(不确认)。这有意义吗?在 RabbitMQ 任务之上处理长时间运行的处理的最佳方法是什么?
问问题
1432 次
1 回答
1
一般来说,这样做是可以的。我已经这样做了很多次,它有一些优点,例如如果您的进程崩溃,未确认的消息将返回队列并稍后再次被拾取
不过,这也有一些潜在的缺点。
一方面,未确认的消息可能会使您的服务器超载。请务必设置消费者预取限制以防止这种情况发生
也可能有进程一旦运行就不应重新启动。我有很多这样的进程......启动外部服务器进程的东西,比如使用 Oracle 的长期运行的数据库数据库。在这种情况下,最好立即确认消息并使用某种状态更新队列来了解该过程何时完成。
总的来说,没有“最佳方式”来处理长时间运行的任务……根本没有最佳实践。我们使用的每一种做法都有潜在的好处和潜在的危害。真正的诀窍是了解哪些场景最适合哪种做法。您需要针对您的场景评估这种方法的优缺点。
于 2015-09-21T13:02:42.737 回答