rabbitmq - RabbitMQ 中长时间未确认的消息

标签 rabbitmq rabbitmq-exchange

我有一个从 RabbitMQ 队列接收订单的业务流程。我正在考虑在很长一段时间内(> 10 分钟)不确认它(意思是,将其留在队列中),然后才将其删除(确认)或不删除(不确认)。这有道理吗?在 RabbitMQ 任务之上处理长时间运行的处理的最佳方法是什么?

最佳答案

一般来说,这样做是可以的。我已经这样做过很多次了,它有一些优点,例如如果您的进程崩溃,未确认的消息将返回到队列中并稍后再次被拾取

不过,这也有一些潜在的缺点。

其一,未确认的消息可能会使您的服务器重载。请务必设置 consumer prefetch limit防止这种情况发生

也可能有一些进程一旦运行就不应重新启动。我有很多这样的进程...启动外部服务器进程的东西,比如长期运行的 Oracle 数据库。在这种情况下,最好立即确认消息并使用某种状态更新队列来了解该过程何时完成。

总的来说,没有“最佳方法”来处理长时间运行的任务......根本没有最佳实践。我们使用的每一种做法都有潜在的好处和潜在的危害。真正的技巧是了解哪些场景最适合哪种实践。您需要针对您的场景评估此方法的优缺点。

关于rabbitmq - RabbitMQ 中长时间未确认的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32693938/

相关文章:

logging - 旋转Rabbitmq日志文件的最佳方法

php - 与 RabbitMQ 的主题交换歧义

ruby - 使用 RabbitMQ 的 ruby​​ AMQP 中的高优先级队列高于低优先级队列?

python - 允许 RabbitMQ 和 Pika 保持连接始终打开

python - 使用 RabbitMQ - 多个生产者和多个消费者

rabbitmq - 是否可以在交换中缓冲消息,直到至少有一个队列可用?

java - 将 Hibernate 搜索与 RabbitMQ 集成以实现分布式后端

java - RabbitMQ 批量确认

python - celery 工作人员拒绝反序列化 application/json 的不受信任内容类型