可靠消息传送
可以将消息的传送模式
设置为持久性或非持久性;此模式控制消息传送的可靠性。
- 保证只将持久性消息
传送并成功使用一次。在消息服务发生故障时,持久性消息不会丢失。对于这些消息,可靠性是优先考虑的因素。
- 保证最多将非持久性消息
传送一次。在消息服务发生故障时,非持久性消息将会丢失。对于这些消息,可靠性并非主要的考虑因素。
对于持久性消息,确保可靠性有两个方面。一方面,通过使用确认和事务来确保成功生成和使用消息。另一方面,通过将消息放在持久性存储库中,确保在将持久性消息传送至消费者之前消息服务不会丢失持久性消息。
以下各节介绍这两个方面的可靠性保证措施。
确认/事务
可靠的消息传送取决于保证成功地将持久性消息从消息生产者传送到消息服务器上的物理目标,然后再成功地从该物理目标传送到消息消费者。这种可靠性可以通过 JMS 会话支持的两个通用机制实现:确认
或事务
。事务可以是本地事务或分布式事务(由分布式事务管理器控制)。
确认
确认是在客户机与消息服务间发送的消息,用于确保可靠地进行传送。
生成消息时,消息服务确认它已收到传送的消息,将该消息置于其目标中并进行持久性存储。生产者的 send()
方法会阻塞,直至确认返回为止。
使用消息时,客户机确认已收到从某个目标传送来的消息并已使用,然后消息服务从该目标中删除消息。JMS 规定了不同的确认模式,它们分别代表不同的可靠性级别。在其中的某些模式下,客户机会阻塞,等待消息服务器确认已删除某个消息,并因此无法重新传送该消息。
本地事务
可以将会话配置为已处理
,这样,可以将一个或多个消息的生成和/或使用组成原子单元,也就是事务
。JMS API 提供了启动、提交或回滚事务的方法。
在事务中生成或使用消息时,消息服务跟踪各个发送和接收过程,并在 JMS
客户机发出提交事务的调用时完成这些操作。如果事务中特定的发送或接收操作失败,则出现异常。客户机代码通过忽略异常、重试操作或回滚整个事务来处理异
常。在事务提交时,将完成其所有操作。在事务进行回滚时,将取消所有成功的操作。
本地事务的范围始终为一个会话。也就是说,可以将单个会话的上下文中执行的一个或多个生产者或消费者操作组成一个本地事务。
由于事务的范围只能为单个的会话,因此不存在既包括消息生成又包括消息使用的端对端事务。(换句话说,至目标的消息传送和随后进行的至客户机的消息传送不能放在同一个事务中。)
分布式事务
JMS 规范还支持分布式
事务。也就是
说,消息的生成和使用可作为较大的分布式事务的一部分,该分布式事务中包括涉及其他资源管理器(如数据库系统)的操作。在分布式事务中,分布式事务管理器
使用在 Java 事务 API (JTA)、XA 资源 API
规范中定义的两阶段提交协议跟踪和管理由多个资源管理器(如消息服务和数据库管理器)执行的操作。在 Java 中,JTA
规范说明了资源管理器和分布式事务管理器之间的交互。
支持分布式事务是指消息传送客户机可通过 JTA 定义的 XAResource
接口参与分布式事务。此接口定义了实现两阶段提交的许多方法。当客户机端进行 API 调用时,JMS 消息服务只与分布式事务管理器(由 Java 事务服务 (JTS) 提供)协作来跟踪分布式事务中的各种发送和接收操作、事务状态并完成消息传送操作。
处理本地事务时,客户机通过忽略异常、重试操作或回滚整个分布式事务来处理异常。
持久性存储器
另一方面的可靠性就是确保在将持久性消息传送至消费者之前,消息服务不会将它们丢失。这意味着,当持久性消息到达其物理目标时,消息服务器必须将其置于持久性数据存储库
中。如果消息服务器由于某种原因发生故障,它可以恢复此消息并将其传送至相应的消费者。
消息服务器还必须持久性地存储长期订阅。否则,当消息服务器发生故障时,就无法向长期订户传送消息;消息到达主题目标后,长期订户会恢复活动状态。
要保证成功传送消息,消息传送应用程序必须将消息指定为持久性消息,并将它们传送给具有长期订阅的主题目标或传送给队列目标。
分享到:
相关推荐
NULL 博文链接:https://itjiehun.iteye.com/blog/1321969
JMS规范并不要求供应商同时支持这两种消息模型,但开发者应该熟悉这两种消息模型的优势与缺点。 企业消息产品(或者有时称为面向消息的中间件产品)正逐渐成为公司内操作集成的关 键组件。这些产品可以将分离的业务...
JMS-java message Service ,消息队列原理介绍,适合activeMQ开发使用
Spring发送接收JMS消息 文档+例子
消息中间件和JMS消息服务.pdf消息中间件和JMS消息服务.pdf消息中间件和JMS消息服务.pdf消息中间件和JMS消息服务.pdf消息中间件和JMS消息服务.pdf消息中间件和JMS消息服务.pdf消息中间件和JMS消息服务.pdf
利用soapUI3.5测试JMS消息 利用soapUI3.5测试JMS消息
weblogic中使用JMS发送和接受消息(Queue and TOPIC)
本教程描述了消息服务的概念和一些应用事例,说明了 JMS 的基本概念和结构,并就消息服务的发布/订阅、点对点模式编写了简单代码,最后讨论的JMS的一些高级问题,如食物、可靠性、可恢复性等。
JMS消息队列机制及众多各种各样的案例,可供学习与参考。
JMS消息模型…………………………………………………………………………………..7 JMS消息工具…………………………………………………………………………………..10 JMS Point-To-Point模式…………………………...
JMS消息处理优化方案
内容为基于JMS的消息中间件的研究与实现,格式为CAJ,页数为54
JMS消息发送及订阅。详细代码,很简单。
JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS
openjms实现jms消息发布于订阅 openjms实现jms消息发布于订阅 openjms实现jms消息发布于订阅 openjms实现jms消息发布于订阅 openjms实现jms消息发布于订阅
JMS规范并不要求供应商同时支持这两种消息模型,但开发者应该熟悉这两种消息模型的优势与缺点。 Java 语言的客户端和 Java 语言的中间层服务必须能够使用这些消息系统。JMS 为 Java 语言程序提供了一个通用的方式来...
Spring+JMS+消息处理
消息中间件和JMS消息服务.rar 消息中间件和JMS消息服务.rar
Java jms处理消息请求的例子,Java创建和初始化一个请求Requestor对象,初始化请求Requestor对象,接受由反馈者replier发回的消息,响应request产生要输出的信息,输出响应信息。