之前我读取了队列中的所有消息,但现在我需要根据用户选择返回特定数量的消息(计数)。
我尝试相应地更改for循环,但由于自动确认,它仍然读取所有消息。因此,我尝试在配置文件中将其更改为手动确认。
在我的程序中,如何在读取消息后手动确认消息(目前我正在使用AmqpTemplate接收消息,没有通道的引用)?
Properties properties = admin.getQueueProperties("queue_name");
if(null != properties)
{
Integer messageCount = Integer.parseInt(properties.get("QUEUE_MESSAGE_COUNT").toString());
while(messageCount > 0)
{
Message msg = amqpTemplate.receive(queue_name);
String value = new String(msg.getBody());
valueList.add(value);
messageCount--;
}
}
任何帮助都非常感激,提前致谢。
AmqpTemplate#receive
会自动确认消息,除非通道是事务性的。如果要控制确认,可以使用AmqpTemplate#execute
并手动执行接收操作,或者最好的方法是使用SimpleMessageListenerContainer
或BlockingQueueConsumer
。 - Nicolas LabrotRabbitTemplate#execute
,它是AmqpTemplate
的实现。 - Nicolas LabrotRabbitTemplate#receive
代码,但我认为这不是正确的方法。 - Nicolas Labrot