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