我有一个从RabbitMQ队列接收订单的业务流程。我正在考虑不承认它(意思是,留在队列中)可能很长一段时间(> 10分钟),然后才删除它(确认)或不(不承认)。这有意义吗?在RabbitMQ任务之上处理长时间运行处理的最佳方法是什么?
答案 0 :(得分:1)
一般情况下,这样做是可以的。我已经做了很多次,并且它有一些优点,例如如果你的进程崩溃,unack的消息将重新进入队列并在以后再次被接收
但是,这有一些潜在的缺点。对于一个,可以使用unack&#d; d消息使服务器过载。请务必设置consumer prefetch limit以防止其发生
它也可能具有一旦运行就不应重新启动的进程。我有很多像这样的过程......开启外部服务器进程的东西,比如用Oracle长期运行的数据库数据库。在这种情况下,最好立即确认消息并使用某种状态更新队列来了解进程何时完成。
总而言之,没有最好的方式"处理长期运行的任务......根本没有最佳实践。我们使用的每一种做法都有潜在的好处和潜在的损害。真正的诀窍是了解哪种情况最适合哪种做法。您需要针对您的方案评估此方法的专业人员和合作伙伴。