RabbitMq:消息处理过程中发生异常时,消息从队列中丢失

RabbitMq: Message lost from queue when exceptions occurred during message processing

我是 ruby rails 开发者。我在我的项目中使用 rabbitMQ 在数据进入队列后立即处理一些数据。我正在使用 bunny gem 一个提供与 RabbitMq 交互的接口的 rabbitMQ 客户端。

我的问题是,每当处理来自队列的数据时发生异常或服务器意外停止,我来自队列的消息就会丢失。

我想知道人们如何处理来自 rabbitMQ 队列的丢失消息。有什么方法可以取回这些消息进行处理。

消息丢失后无法取回。也许您可以尝试追踪 RMQ 的数据库缓存中的一些条目 - 但那只是一个疯狂的 guess/long 镜头,我认为它不会有帮助。

你需要为未来做的是:

  • 如果您使用的是单个服务器:使队列和消息持久化,并且仅在消息被处理后才在消费者端明确确认(因此关闭自动确认标志)消息。
  • 如果您使用的是 RMQ 节点集群(当然建议完全避免这些情况):设置队列镜像

看看RMQ persistance and high availability.