【发布时间】:2015-06-21 08:58:07
【问题描述】:
以前我正在阅读队列中存在的所有消息,但现在我必须根据用户的选择(计数)返回特定数量的消息。
我尝试相应地更改 for 循环,但由于自动确认,它会读取所有消息。所以我尝试在配置文件中将其更改为手动。
在我的程序中,如何在阅读 msg 后手动确认消息(目前我正在使用 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 -
@NicolasLabrot 我没有在 AmqpTemplate 中找到执行方法,你指的是别的东西吗?是的,我确实在 SimpleMessageListenerContainer 中将 setAcknowledgeMode 设置为 MANUAL。
-
对不起,我指的是
RabbitTemplate#execute,它是AmqpTemplate的实现 -
@NicolasLabrot 您能否对此有所了解。什么是 ChannelCallback,看起来我需要一个我没有的频道参考。
-
看看
RabbitTemplate#receivecode 但我不认为这是正确的方法。
标签: rabbitmq spring-amqp spring-rabbit