【问题标题】:RabbitMq: Message lost from queue when exceptions occurred during message processingRabbitMq:消息处理期间发生异常时从队列中丢失消息
【发布时间】:2016-10-16 22:10:34
【问题描述】:

我是 ruby​​ on rails 开发人员。一旦数据进入队列,我在我的项目中使用 rabbitMQ 来处理一些数据。我正在使用 bunny gem 一个 rabbitMQ 客户端,它提供与 RabbitMq 交互的接口。

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

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

【问题讨论】:

  • 您能提供更多信息吗?异常、代码结构等
  • 在我的情况下,每当出现错误时,都会从主队列中删除消息并进入错误队列。我们为错误队列创建了一个消费者,并在主队列中再次发布所有错误消息。此解决方法解决了我们的问题。

标签: ruby-on-rails rabbitmq message-queue bunny


【解决方案1】:

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

未来你需要做的是:

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

看看 RMQ persistancehigh availability.

【讨论】: