我的业务需要一次性获取 某个队列里的所有消息,然后进行处理,我不知道该如何保证数据的安全性。请教各位大牛
我现在是获取到了队列里所有的消息数量,然后通过循环获取到了,所有的消息,但是这样获取到消息后,队列里的消息就删除了,能否我获取到所有消息,然后做完处理后再去进行手动的 应答。
/**
* 获取该队列里的消息数量
*/
AMQP.Queue.DeclareOk declareOk = rabbitTemplate.execute(new ChannelCallback<AMQP.Queue.DeclareOk>() {
public AMQP.Queue.DeclareOk doInRabbit(Channel channel) throws Exception {
return channel.queueDeclarePassive(QueueConfig.DIRECT_QUEUE_NAME);
}
});
System.out.println("队列消息数量:"+declareOk.getMessageCount());
//所有消息集合
List<caseSea> allList = new ArrayList<>();
for (int i = 0; i < declareOk.getMessageCount(); i++) {
Object msg = rabbitTemplate.receiveAndConvert(QueueConfig.DIRECT_QUEUE_NAME);
List<caseSea> list = new ArrayList<>();
if(msg !=null){
list = (List<caseSea>) msg;
}
allList.addAll(list);
消息队列有确认机制来保证数据的安全性。
https://www.jianshu.com/p/4616cb865558
采用确认机制即可,要求服务端返回ack