可靠消息传送
可以将消息的传送模式
设置为持久性或非持久性;此模式控制消息传送的可靠性。
- 保证只将持久性消息
传送并成功使用一次。在消息服务发生故障时,持久性消息不会丢失。对于这些消息,可靠性是优先考虑的因素。
- 保证最多将非持久性消息
传送一次。在消息服务发生故障时,非持久性消息将会丢失。对于这些消息,可靠性并非主要的考虑因素。
对于持久性消息,确保可靠性有两个方面。一方面,通过使用确认和事务来确保成功生成和使用消息。另一方面,通过将消息放在持久性存储库中,确保在将持久性消息传送至消费者之前消息服务不会丢失持久性消息。
以下各节介绍这两个方面的可靠性保证措施。
确认/事务
可靠的消息传送取决于保证成功地将持久性消息从消息生产者传送到消息服务器上的物理目标,然后再成功地从该物理目标传送到消息消费者。这种可靠性可以通过 JMS 会话支持的两个通用机制实现:确认
或事务
。事务可以是本地事务或分布式事务(由分布式事务管理器控制)。
确认
确认是在客户机与消息服务间发送的消息,用于确保可靠地进行传送。
生成消息时,消息服务确认它已收到传送的消息,将该消息置于其目标中并进行持久性存储。生产者的 send()
方法会阻塞,直至确认返回为止。
使用消息时,客户机确认已收到从某个目标传送来的消息并已使用,然后消息服务从该目标中删除消息。JMS 规定了不同的确认模式,它们分别代表不同的可靠性级别。在其中的某些模式下,客户机会阻塞,等待消息服务器确认已删除某个消息,并因此无法重新传送该消息。
本地事务
可以将会话配置为已处理
,这样,可以将一个或多个消息的生成和/或使用组成原子单元,也就是事务
。JMS API 提供了启动、提交或回滚事务的方法。
在事务中生成或使用消息时,消息服务跟踪各个发送和接收过程,并在 JMS
客户机发出提交事务的调用时完成这些操作。如果事务中特定的发送或接收操作失败,则出现异常。客户机代码通过忽略异常、重试操作或回滚整个事务来处理异
常。在事务提交时,将完成其所有操作。在事务进行回滚时,将取消所有成功的操作。
本地事务的范围始终为一个会话。也就是说,可以将单个会话的上下文中执行的一个或多个生产者或消费者操作组成一个本地事务。
由于事务的范围只能为单个的会话,因此不存在既包括消息生成又包括消息使用的端对端事务。(换句话说,至目标的消息传送和随后进行的至客户机的消息传送不能放在同一个事务中。)
分布式事务
JMS 规范还支持分布式
事务。也就是
说,消息的生成和使用可作为较大的分布式事务的一部分,该分布式事务中包括涉及其他资源管理器(如数据库系统)的操作。在分布式事务中,分布式事务管理器
使用在 Java 事务 API (JTA)、XA 资源 API
规范中定义的两阶段提交协议跟踪和管理由多个资源管理器(如消息服务和数据库管理器)执行的操作。在 Java 中,JTA
规范说明了资源管理器和分布式事务管理器之间的交互。
支持分布式事务是指消息传送客户机可通过 JTA 定义的 XAResource
接口参与分布式事务。此接口定义了实现两阶段提交的许多方法。当客户机端进行 API 调用时,JMS 消息服务只与分布式事务管理器(由 Java 事务服务 (JTS) 提供)协作来跟踪分布式事务中的各种发送和接收操作、事务状态并完成消息传送操作。
处理本地事务时,客户机通过忽略异常、重试操作或回滚整个分布式事务来处理异常。
持久性存储器
另一方面的可靠性就是确保在将持久性消息传送至消费者之前,消息服务不会将它们丢失。这意味着,当持久性消息到达其物理目标时,消息服务器必须将其置于持久性数据存储库
中。如果消息服务器由于某种原因发生故障,它可以恢复此消息并将其传送至相应的消费者。
消息服务器还必须持久性地存储长期订阅。否则,当消息服务器发生故障时,就无法向长期订户传送消息;消息到达主题目标后,长期订户会恢复活动状态。
要保证成功传送消息,消息传送应用程序必须将消息指定为持久性消息,并将它们传送给具有长期订阅的主题目标或传送给队列目标。
分享到:
相关推荐
ActiveMQ是Apache软件基金会开发的一个开源JMS提供者,它提供了高性能、可靠的跨语言消息传递服务。 **描述:** 尽管描述中并未给出具体信息,但我们可以推断这篇博文可能详细介绍了如何使用JMS与ActiveMQ结合来...
- **消息服务体系结构**:JMS定义了两种主要的消息传送模型——点对点(Point-to-Point, PTP)和发布/订阅(Publish/Subscribe, Pub/Sub)模型。 - **消息传送模型对照表**:PTP模式使用Queue,消息只能被一个消费...
1. **消息类型选择**:客户端必须使用`javax.jms.TextMessage`或`javax.jms.BytesMessage`来向服务器传送SOAP请求消息。如果请求消息包含附件,则必须使用`BytesMessage`;若无附件,客户端可选择使用`TextMessage`...
JMS的核心概念包括三个主要角色:传送节点(消息生产者)、接收节点(消息消费者)和消息导向中间件(MOM)。消息生产者负责创建并发送消息到MOM,而消息消费者则从MOM接收并处理消息。MOM作为消息的交换中心,提供...
2. **创建消息传送服务器 (JMS Server)**: 进入控制台后,导航到“Services” > “Messaging” > “JMS Services”。点击“Lock & Edit”以进入编辑模式,然后选择“New”创建一个新的 JMS 服务器。这里我们创建名...
ActiveMQ作为JMSProvider,实现了JMS规范,支持以上讨论的消息模型和概念,并提供了消息服务的高性能、可靠的消息传递。ActiveMQ不仅能够通过各种协议连接多种客户端,还允许用户通过其提供的管理控制台来监控消息...
- **可靠消息传送**: - **确认/事务**:确保消息被正确处理的机制。 - **持久性存储器**:用于存储未被消费的消息,即使在服务器重启后也能恢复消息。 - **JMS受管理对象**:指JMS提供的一组对象,如连接工厂、...
综上所述,掌握JMS的基本概念和核心API对于开发可靠的分布式系统至关重要。了解JMS的不同版本及其提供的功能可以帮助开发者更好地选择适合自身需求的技术栈。同时,熟悉ActiveMQ这样的具体实现,有助于开发者在实际...
ActiveMQ是Apache软件基金会的一个开源项目,它实现了JMS规范,提供了一个高效、灵活且可靠的的消息中间件。在Sender和Receiver的示例中,ActiveMQ可能被用作消息代理,接收来自Sender的消息并将它们转发给Receiver...
这些配置是实现 Java 应用之间的异步通信基础,确保消息的可靠传输和解耦。通过 WebLogic 的管理控制台,我们可以方便地管理这些资源,满足企业级应用的需求。在实际操作中,应根据具体的应用场景和需求进行适当的...
消息中间件(MOM,Message-oriented middleware)可以提供高效可靠的消息传递机制,实现平台无关的数据交流,并促进分布式系统的集成。通过消息传递和消息排队模型,消息中间件可以在分布式环境下扩展进程间的通信,...
- **定义**:Java消息服务(Java Message Service, JMS)是一种在分布式环境中进行消息传递的标准API,它提供了一种灵活且可靠的方式来在应用程序之间进行异步通信。JMS允许独立于平台的开发,使得开发人员能够在...
在JMS入门的第三部分,我们将深入探讨点对点消息传送模型的实现。文章中可能会涵盖以下内容: 1. **JMS组件**:首先,我们需要了解JMS中的关键组件,如Message Producer(消息生产者)、Message Consumer(消息消费...
消息队列是一种在消息传输过程中保存消息的容器,它允许在两台计算机之间传送消息,这些消息可以很简单,比如只包含文本字符串,也可以很复杂,如包含嵌入对象。消息队列的作用主要是异步处理、提高系统性能、降低...
JMS支持两种消息传送模型:点对点 (PTP) 和发布/订阅 (Pub/Sub)。 1. **点对点模型 (PTP)**:消息从生产者传送到消费者,每个消息只能被一个消费者消费。在PTP模型中,Destination是一个Queue(队列),消息先发送...