我的Java应用程序将消息发送到RabbitMQ exchange,然后exchange将消息重定向到绑定的队列。我使用Springframework AMQP java插件与RabbitMQ。
问题是:消息到达队列,但它停留在“未确认”状态,永远不会变成“已准备就绪”。
可能的原因是什么?
我的Java应用程序将消息发送到RabbitMQ exchange,然后exchange将消息重定向到绑定的队列。我使用Springframework AMQP java插件与RabbitMQ。
问题是:消息到达队列,但它停留在“未确认”状态,永远不会变成“已准备就绪”。
可能的原因是什么?
channel.queueDeclare(queueName, ....)
接下来,您将设置消费者
bool ackMode = false;
QueueingConsumer consumer = new QueueingConsumer(channel);
channel.basicConsume(queueName, ackMode, consumer);
ackMode是一个布尔值,将其设置为false,我们明确告诉RabbitMQ我的消费者将确认每个消息。如果将此标志设置为true,则您在RabbitMQ中将看不到未确认的计数,而是一旦消费者读取了该消息(即已将其传递给消费者),它将从队列中删除该消息。
要确认消息,您可以执行以下操作:
QueueingConsumer.Delivery delivery = consumer.nextDelivery();
//...do something with the message...
channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false); //the false flag is to do with multiple message acknowledgement