JMS - 事务性消息
JMS 事务遵从发送操作与接收操作相互分离的约定。下图显示的是一个事务性发送,其中一组消息要么能够保证全部到达消息服务器,要么连一条消息也不能保证到达消息服务器。从发送者的角度来看,JMS 提供者为这组消息提供了高速缓存,直到执行 commit() 为止。如果发生了故障,或者执行了 rollback(),这些消息就会丢弃。在一个事务中传送给消息服务器的消息,它并不会转发给消费者,知道该生产者提交该事务为止。
生产者在会话上发布 commit() 之前,JMS 提供者不会开始向它的消费者传送消息,即使它已经从发送者处接收到所有的消息。JMS 事务的范围能够包括任意数量的消息。虽然会话 commit() 和 JTA(Java Transaction API) 事务 commit() 在概念上类似,但是二者并不相同。会话事务是由 JMS 提供者管理的,而不是由 JTA 管理的。
JMS 还支持事务性接收,消费者正在接收一组事务性消息,而且要么全部接收,要么一条也不接收,参考下图。从事务性接收者的角度来看,这些消息会尽可能快地传送给接收者,但是它们一直由 JMS 提供者保存,直到接收者在会话对象上执行 commit() 为止。如果发送了故障,或者执行 rollback(),提供者会试图重新传送消息,在这种情况下,这些消息就会设置重新传送标记。
发送消息,如果在发送消息的方法正常完成后没有调用 Session.commit() 方法,JMS 提供者会从队列中删除这些消息,而这些消息并没有传送给消息消费者。接收消息时,如果在接收消息的方法正常完成后没有调用 Session.commit() 方法,消息就会被标记为未被传送。JMS 提供者会把这些消息重新传送给消息消费者,并将 JMSRedelivered 消息头属性设置为 true,表示此前曾试图处理过这些消息。因此在这两种情况下,都必须注意:要确保在该方法结束之前,提交会话或将其回滚。
Sample Code:
// ...
Connection connection = null;
Session session = null;
try {
Context ctx = new InitialContext();
ConnectionFactory connFactory = (ConnectionFactory) ctx.lookup("connectionFactory");
connection = connFactory.createConnection();
connection.start(); // 创建会话对象实例,第一个参数表示会话是否是启用事务
session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE); Destination destination = (Destination) ctx.lookup("HelloQueue");
MessageProducer msgProducer = session.createProducer(destination);
Message textMsg = session.createTextMessage("This is a test message.");
msgProducer.send(textMsg); // 提交事务
session.commit();
System.out.println("send the message successfully");
} catch (Exception e) {
if (session != null) {
try {
// 回滚事务
session.rollback();
} catch (JMSException jmse) {
jmse.printStackTrace();
}
}
e.printStackTrace();
} finally {
JMSUtils.closeConnection(connection);
}
// ...
JMS - 事务性消息的更多相关文章
- ActiveMQ安装与入门程序 & JMS的消息结构
1.Activemq安装 直接到官网下载:记住apache的官网是域名反过来,比如我们找activemq就是activemq.apache.org. 最新版本要求最低的JDK是8,所以最好在电脑装多个 ...
- 阿里高级架构师教你使用Spring JMS处理消息事务源码案例
消费者在接收JMS异步消息的过程中会发生执行错误,这可能会导致信息的丢失.该源码展示如何使用本地事务解决这个问题.这种解决方案可能会导致在某些情况下消息的重复(例如,当它会将信息储存到数据库,然后监听 ...
- JMS(Java消息服务)入门教程
什么是Java消息服务 Java消息服务指的是两个应用程序之间进行异步通信的API,它为标准消息协议和消息服务提供了一组通用接口,包括创建.发送.读取消息等,用于支持JAVA应用程序开发.在J2EE中 ...
- JMS和消息驱动Bean(MDB)
一.说明 本示例使用的ActiveMQ作为消息中间件,服务器为Glassfish,使用JMS发送消息,在MDB接收到消息之后做打印输出. 二.ActiveMQ安装配置 1.安装console war包 ...
- JMS Java消息服务(Java Message Service)
JMS 在一些场景下RPC的同步方式可能不太适合业务逻辑的处理,并且这种方式在某些场景下会导致业务的紧耦合. 基于异步交互模型的JMS解决了RPC产生的紧耦合问题,它提供了一个可以通过网络访问的抽象消 ...
- JMS异步消息机制
企业消息系统 Java Message Service 是由 Sun Microsystems 开发的,它为 Java 程序提供一种访问 企业消息系统 的方法.在讨论 JMS 之前,我们分来析一下企业 ...
- ActiveMQ JMS实现消息发送
一.创建配置消息发送接收目的地. ActiveMQ中间件地址 JMS_BROKER_URL=failover://(tcp://192.168.1.231:61616) QUEUE_BUSP_TP_S ...
- ActiveMQ消息队列从入门到实践(4)—使用Spring JMS收发消息
Java消息服务(Java Message Service ,JMS)是一个Java标准,定义了使用消息代理的通用API .在JMS出现之前,每个消息代理都有私有的API,这就使得不同代理之间的消息代 ...
- JMS(Java消息服务)入门教程(一)
什么是Java消息服务 Java消息服务指的是两个应用程序之间进行异步通信的API,它为标准消息协议和消息服务提供了一组通用接口,包括创建.发送.读取消息等,用于支持JAVA应用程序开发.在J2EE中 ...
随机推荐
- VB.NET开发中遇到的一个小问题
在修改公司用vb.net的写的代码时,遇到一个小问题 页面上有一个button, ID是btnNext, 在属性页中,它的click事件对应的是cmdNext, 我像在c#中一样,在属性页中双击cmd ...
- Altium Desiger自定义BOM导出格式
用Excel做一个xx.xlt的2003的模版文件,如名为:AltiumDesiger PCB BOM Template.xlt 将AltiumDesiger PCB BOM Template.xlt ...
- C#枚举数值与名称的转换
在应用枚举的时候,时常需要将枚举和数值相互转换的情况.有时候还需要转换成相应的中文.下面介绍一种方法. 首先建立一个枚举: /// <summary> /// 颜色 /// </su ...
- this指针和m_hWnd的区别
m_hWnd ① m_hWnd这个成员变量,最早是定义在类CWnd中,而且是类CWnd的第一个数据成员, 先看一下MSDN的解析: The handle of the Windows window a ...
- javascript --学习闭包,自由变量
闭包 下面是百度百科的解释: 闭包是指可以包含自由(未绑定到特定对象)变量的代码块:这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量). 也就是说一个代码块 ...
- foxpro常用命令
Visual FoxPro原名FoxBase,最初是由美国Fox Software公司于1988年推出的数据库产品,在DOS上运行,与xBase系列兼容.FoxPro是FoxBase的加强版,最高版本 ...
- php 基本符号
用这么久了,竟然PHP的基本符号都没有认全,看到@号还查了半天才知道什么意思.把基本符号列表帖一下吧,需要的朋友可以参考~ 注解符号: // 单行注解 /* ...
- 深入浅出之Smarty模板引擎工作机制(二)
源代码下载地址:深入浅出之Smarty模板引擎工作机制 接下来根据以下的Smarty模板引擎原理流程图开发一个自己的模板引擎用于学习,以便加深理解. Smarty模板引擎的原理,其实是这么一个过程: ...
- BZOJ 1079: [SCOI2008]着色方案 记忆化搜索
1079: [SCOI2008]着色方案 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...
- [Ramda] Basic Curry with Ramda
var _ = R; /***************************************** C U R R Y I N G E X A M P L E **************** ...