2016-10-16 160 views
0

我是Ruby on Rails开发人员。我在项目中使用rabbitMQ来在数据进入队列后立即处理一些数据。我使用兔子宝石rabbitMQ客户端,提供接口与RabbitMq进行交互。RabbitMq:消息处理期间发生异常时队列中丢失的消息

我的问题是,无论何时发生异常或服务器在处理队列中的数据时意外停止,我的消息将从队列中丢失。

我想知道人们如何处理来自rabbitMQ队列的丢失消息。有没有办法让这些消息回来处理。

+0

你能否提供更多信息?例外情况,代码结构等 –

+1

在我的情况下,每当错误消息从主队列中移除并进入错误队列。我们为错误队列创建了一个消费者,并在主队列中再次发布所有错误消息。 此变通办法解决了我们的问题。 –

回答

1

当他们迷路时,没有办法获取消息。也许你可以尝试跟踪RMQ的数据库缓存中的一些条目 - 但这只是一个疯狂的猜测/远景,我认为这不会有帮助。

你做什么,需要为未来做的是:

  • 如果你正在使用一台服务器:使队列和消息耐用,而且明确承认(因此关闭自动ACK标志)消费者方面的消息只有在处理完毕后才会显示
  • 如果你正在使用RMQ节点的集群(这当然正是建议,以避免这些情况的):设置队列镜像

看看RMQ persistancehigh availability.