ActiveMQ 消息确认
2024-09-01 14:03:07
一、事务性会话:当一个事务被提交的时候,确认自动发生
ConnectionFactory connectionFactory=new ActiveMQConnectionFactory("tcp://192.168.174.104:61616");
Connection connection = connectionFactory.createConnection();
connection.start(); Session session=connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
Destination queue=session.createQueue("my-queue1"); MessageConsumer consumer = session.createConsumer(queue); int i=0;
while (i<3){
TextMessage message=(TextMessage) consumer.receive();
System.out.println(message.getText());
session.commit();
} session.close();
connection.close(); }
如果事务性会话中,不执行 session.commit(),消息不会创建或被消费。
二、在非事务性会话中:消息何时被确认取决于创建会话时的应答模式(acknowledgement mode)。该参数有以下三个可选值:
Session.AUTO_ACKNOWLEDGE:当客户成功的从receive方法返回的时候,或者从MessageListener.onMessage方法成功返回的时候,会话自动确认客户收到的消息。
Session session=connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);
Session.CLIENT_ACKNOWLEDGE:客户通过调用消息的acknowledge方法确认消息。需要注意的是,在这种模式中,确认是在会话层上进行,确认一个被消费的消息
将自动确认所有已被会话消费的消息。例如,如果一个消息消费者消费了10 个消息,然后确认第5 个消息,那么所有10 个消息都被确认。
ConnectionFactory connectionFactory=new ActiveMQConnectionFactory("tcp://192.168.174.104:61616");
Connection connection = connectionFactory.createConnection();
connection.start(); Session session=connection.createSession(Boolean.FALSE, Session.CLIENT_ACKNOWLEDGE);
Destination queue=session.createQueue("my-queue2"); MessageConsumer consumer = session.createConsumer(queue); int i=0;
while (i<3){
TextMessage message=(TextMessage) consumer.receive();
//System.out.println(message.getStringProperty("queue"));
System.out.println(message.getText());
//session.commit(); if(i==2){
message.acknowledge();
} i++; } session.close();
connection.close(); }
Session.DUPS_ACKNOWLEDGE:该选择只是会话迟钝的确认消息的提交。如果JMS provider失败,那么可能会导致一些重复的消息。如果是重复的消息,那么JMS provider 必须把消息头的JMSRedelivered字段设置为true。
最新文章
- nginx简易教程
- js MATH
- SetTimer 与 回调函数
- strstr函数
- HDU 1025 Constructing Roads In JGShining&#39;s Kingdom(求最长上升子序列nlogn算法)
- Groupon面经Prepare: Sort given a range &;&; Summary: Bucket Sort
- [转] lib和dll 区别,生成及使用方法
- Debug with jdb
- 【转】Spring+Hibernate+EHcache配置(一)
- SignalR 2.0 系列: SignalR简介
- DataReader的用法程序简析
- 关于/var/run/docker.sock
- c# 动态实例化一个泛型类
- objectarx 读取外部DWG图到当前图形
- linux ssh反向代理
- Docker存储驱动Device Mapper,Overlay,AUFS
- Groovy 类名称赋值为变量使用(newInstance &; new)
- ES6学习笔记八(module模块export)
- node.js中实现http服务器与浏览器之间的内容缓存
- 编程实现类似Linux下cp功能