事务消息
创建会话Session使用transacted=true
connection.createSession(Boolean.TRUE,Session.AUTO_ACKNOWLEDGE);
创建会话Session使用transacted=false
connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);
事务消息必须在发送和接收完消息后显式地调用session.commit();
事务性消息,不管设置何种消息确认模式,都会自动被确认,确认后,消息会从消息队列移除,因为消息队列中的消息只会被消费一次,不能当做缓存或者永久性存储。
案例演示
● 修改QueueSender类中的消息为事务消息
● 如果发送消息后不提交,运行程序,查看ActiveMQ管理后台,还是没有待处理的消息
● 在QueueSender类中添加提交代码
● 运行程序,查看ActiveMQ管理后台,消息进入队列
● 修改QueueReceiver类中的消息为事务消息
● 运行程序,消息可以接收到,但是查看ActiveMQ管理后台,消息还是没有被消费
● 在QueueReceiver类中接收消息后添加提交代码
● 查看ActiveMQ管理后台,消息被消费