activeMQ-08签收机制
2020-02-01 本文已影响0人
誓俭草
activeMQ的签收机制,主要作用于消费者。
1)默认为自动签收;Session.AUTO_ACKNOWLEDGE;
2)手动签收;Session.CLIENT_ACKNOWLEDGE;
具体使用如下:
//创建连接session;第一个参数为事务,第二个参数为签发机制。此处为手动签收机制;
session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
//创建消息目的地队列(队列名称)
Queue queue = session.createQueue(queueName);
//创建消费者
messageConsumer = session.createConsumer(queue);
while(true) {
// messageConsumer.receive();此方法会一直等待消息,不会中止进程
// messageConsumer.receive(4000L);等待4s后,若无消息,则中止进程,不再等待
Message message = messageConsumer.receive();
if(message!=null) {
TextMessage textMessage = (TextMessage) message;
System.out.println("消费的消息是"+textMessage);
//需要手动写入以设置签收,不然消息则视为未消费;
textMessage.acknowledge();
}else {
break;
}
}
注意事项:
1)开启事务和非事务,消费者签收机制需要注意,开启事务后,session.commit();后,即使不调用textMessage.acknowledge();消息也会被签收,没有commit,即使手动签收textMessage.acknowledge();也没有作用;
2)总之,MQ的事务session作用大于消息的签收;