RabbitMQ得到了未经确认的消息

时间:2015-02-06 13:09:33

标签: java spring queue rabbitmq amqp

我有一个RabbitMQ服务器,它有大约100个队列,每个队列有大约100条消息。所有队列都具有相同的交换和单独的路由密钥。 我正在使用Spring的amqp框架与RabbitMQ服务器进行交互。我有多个应用程序使用相同的RabbitMQ服务器(即多个消费者)。

我面临的问题是对于某些特定的消费者而言 收到消息,ack失败,即我可以在某些队列中看到一些未确认的消息。现在,如果我的应用程序偶然收到一个重复的(未经处理的消息,即之前收到过的消息)消息,它会抛出异常,这就是我开始获取那些未经处理的消息。

但是我甚至不确定何时以及为什么我会收到一条未包装的(即重复的)消息,因为我不确定未经处理的消息的优先级。那么,你们可以为以下问题提供解决方案:

  1. 即使在正确收到消息之后,为什么有时候只有ack不成功。
  2. 即使没有第一个问题的解决方案,1我应该如何配置我的应用程序,以便它永远不会收到未包装(重复)的消息。

    从创作的一开始就没有看到这种行为 在应用程序中,它最近以这种方式开始表现。

1 个答案:

答案 0 :(得分:0)

看看以下内容:

  1. Semaphore queue在Rabbit中实现。 (可选择使用zookeeper或etcd来实现此目的)
  2. 当您收到消息时,它有一个标志redelivered,该消息在消息已被其他消费者使用时设置,但由于某种原因返回队列。因此,您只需检查一下,如果已设置,则删除该消息。