一、事务性会话当一个事务被提交的时候,确认自动发生

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。

  

最新文章

  1. nginx简易教程
  2. js MATH
  3. SetTimer 与 回调函数
  4. strstr函数
  5. HDU 1025 Constructing Roads In JGShining&#39;s Kingdom(求最长上升子序列nlogn算法)
  6. Groupon面经Prepare: Sort given a range &amp;&amp; Summary: Bucket Sort
  7. [转] lib和dll 区别,生成及使用方法
  8. Debug with jdb
  9. 【转】Spring+Hibernate+EHcache配置(一)
  10. SignalR 2.0 系列: SignalR简介
  11. DataReader的用法程序简析
  12. 关于/var/run/docker.sock
  13. c# 动态实例化一个泛型类
  14. objectarx 读取外部DWG图到当前图形
  15. linux ssh反向代理
  16. Docker存储驱动Device Mapper,Overlay,AUFS
  17. Groovy 类名称赋值为变量使用(newInstance &amp; new)
  18. ES6学习笔记八(module模块export)
  19. node.js中实现http服务器与浏览器之间的内容缓存
  20. 编程实现类似Linux下cp功能

热门文章

  1. java集合——Map
  2. chrome浏览器备忘
  3. 唯品会HDFS性能挑战和优化实践
  4. 富文本编辑器handyeditor,上传和预览图片的host地址不一样
  5. 随机数据构造-Faker
  6. Mysql常见索引介绍
  7. PAT 甲级 1039 Course List for Student (25 分)(字符串哈希,优先队列,没想到是哈希)*
  8. C#将HTML代码转换为图片
  9. LeetCode_125. Valid Palindrome
  10. 树莓派连接显示器后设置ssh服务开机自动开启