2.4.7 JMS领域
就像之前提到的,JMS是团队成果,这个团队就包括了消息传送实现的提供商。JMS定义了两种类型的消息传送,这是由现有的消息传送实现决定的。这两种风格(也叫做领域domains)是point-to-point及publish/subscribe。大多数的MOMs已经支持两种类型的消息传送风格,所以JMS API也必须同时支持它们。让我们详细看下这两种类型的消息传送。
点对点领域
点对点(PTP)消息传送使用的目标是队列。通过使用队列,消息可以被异步或同步地发送和接收。每一条到达队列的消息将会被投递到单独一个消费者一次,并且只有一次。这就好像两个人之间的邮件发送。消费者可以通过MessageConsumer.receive()方法同步地接收消息或使用MessageConsumer.setMessageListener()方法注册一个MessageListener实现来异步地接收消息。队列保存所有的消息直到它们被投递出去或过期。
如图2.6所示,多个消费者可以注册在一个队列上,但一条消息只有一个消费者会接收到。然后消费者要决定是否应答这条消息。注意,图2.6所示的消息是从一个生产者出来的并且只投递给一个消费者,而不是所有消费者。就像前面提到的,JMS提供者保证消息一次并且只有一次投递给下一个准备好的消费者。JMS提供者是对所有已注册的消费者循环发送消息的。
发布订阅领域
发布订阅模式的消息使用主题(topics)作为目标。发布者发送消息到主题,订阅者从主题接收消息。发送到主题的消息会自动发给所有的订阅者。这个消息传送领域就像预制一个邮件列表,所有邮件列表上的用户都会受到消息。图2.7描述了这种情况。
就像PTP消息传送一样,订阅者可以通过MessageConsumer.receive()方法同步地接收消息或使用MessageConsumer.setMessageListener()方法注册一个MessageListener实现来异步地接收消息。主题并不保存消息,除非显式地让它这样做。这个可以通过使用持久订阅(durable subscription)来实现。使用持久订阅,如果一个订阅者与JMS提供者连接断开,JMS提供者有责任为该订阅者保存消息。重新连上后,订阅者将收到所有的未过期的消息。持久订阅允许订阅者断开连接而不会丢失任何消息。
持久订阅(durability)和消息持久化(persistence)的区别
持久订阅和消息持久化是JMS经常会混淆的两个概念。虽然它们很类似,但是还是有一些明显的不同,并且它们的用途也不一样。消息持久订阅只在发布/订阅领域有效。当客户端连接到一个主题上,它们可以选择使用持久或非持久订阅。考虑这两种情况的区别。
- 持久订阅----一个持久订阅的时间是无限的。客户端注册到主题上,并且告诉JMS提供者当订阅者断开连接时保持订阅状态。如果一个订阅者的连接断开了,JMS提供者将保持所有的消息直到订阅者重新连上或者订阅者取消订阅。
- 非持久订阅----一个非持久订阅是有限的。客户端注册到主题上并且告诉JMS提供者当连接断开是不用保持订阅状态。如果一个订阅者断开连接,JMS提供者在断开的这段时间里不会保存任何消息。
消息持久化是独立于消息领域的。消息持久化是一种服务质量属性,它用来指出JMS应用处理消息投递失败时的能力。就像之前提到的,这个值是通过消息生产者setDeliveryMode方法来设置的,这个方法的输入参数是JMSDeliveryMode类的变量PERSISTENT或NON-PERSISTENT。
JMS应用的请求/回复传送机制
虽然JMS规范没有把请求/回复(request/reply)消息传送作为一种正式的消息领域来定义。当它提供了一些消息头部和许多有用的类来处理请求/回复消息传送。请求/回复消息传送是一种异步的会话模式,可以在PTP或pub/sub领域使用。这种模式会用到JMSReplyTo和JMSCorrelationID消息头部及临时的消息目标。JMSReplyTo指定一个回复消息投递的目标,JMSCorrelationID指定回复消息对应的请求的JMSMessageID。这些头部用来关联回复消息和它(们)的请求消息。临时的目标只能在连接持续时间里有效并且只能被创建它的连接使用。这些限制条件使得临时目标对于请求/回复模式很有用。
QueueRequestor和TopicRequestor是两个处理请求/回复模式的有用的类。这些类提供一个request()方法发送一条请求消息并且通过临时目标等待回复。一般地,是一个请求预期会得到一个回复。图2.8显示了一个请求,一个回复的流程。
图2.8通过两个终端描绘了基本的请求/回复消息传送类型。这个过程是使用了JMSReplyTo消息头部和一个临时目标。接收者通过临时目标发送回复消息,请求者则通过它接收消息。QueueRequestor和TopicRequestor这两个类可以用来处理基本的请求/回复模式,但不能用来处理复杂的情况,比如一个请求对应多个接收者的多个回复。这种需求要求你自己开发自定义的JMS客户端。
2.4.8 管理对象(Administered objects)
管理对象包含JMS提供者特定的配置信息,它由JMS管理者创建。因此,管理对象是被JMS客户端使用的。它们用来隐藏提供者特定的细节并且抽象JMS提供者的管理任务。管理对象可以通过JNDI访问,但不是必须。最常见的情况是JMS提供者寄居在Java EE容器里。JMS规范提供两种类型的管理对象:连接工厂(ConnectionFactory)和目标(Destination)。
连接工厂
JMS客户端使用连接工厂来创建到JMS提供者的连接。连接一般就是一个客户端与JMS提供者之间的TCP连接,所以连接的负载是很大的。使用一个连接池是比较合适的。一个到JMS提供者的连接就像一个到关系数据库的JDBC连接(JDBC连接是客户端用来和数据库交互的)。客户端使用JMS连接来创建java.jms.Session对象,该对象代表与JMS提供者的一个交互。
目标
目标封装了提供者特定的地址,这地址是用来发送和消费信息的。虽然目标是使用session对象创建的,它们的生存时间是和创建session的连接一致。
临时目标对于一个连接是唯一的。它们的生命周期和创建它们的连接一致,并且只有创建它们的连接才能为该目标创建消费者。就像前面提到的,临时目标是用在请求/回复消息传送中的。
- 大小: 45.5 KB
- 大小: 54 KB
- 大小: 26.3 KB
分享到:
相关推荐
### JMS规范教程知识点解析 #### 一、JMS基本概念 **1.1 什么是JMS(JAVA MESSAGE SERVICE)?** JMS,即Java Message Service,是Java平台中的消息服务应用标准,允许应用程序组件通过Java消息服务进行通信。它...
### JMS规范1.1(中文版)关键知识点解析 #### 一、引言 **1.1 摘要** - **主要内容:** 该规范详细介绍了Java消息服务(Java Message Service,简称JMS)的目标及其核心功能。JMS为Java开发者提供了一套统一的...
### JMS规范详解 #### 一、JMS基础概览 **1.1 何为JMS(Java Message Service)?** JMS,即Java消息服务,是Java平台中的消息中间件规范,它允许应用程序创建、发送、接收和读取消息,从而在两台或多台计算机...
### JMS规范教程知识点解析 #### 一、JMS基本概念 **1.1 什么是JMS(JAVA MESSAGE SERVICE)?** JMS,即Java Message Service,是Java平台中的消息服务应用标准,它允许应用程序组件生成、发送、接收以及读取...
它包含了各种服务,如Servlet、JSP(JavaServer Pages)、EJB(Enterprise JavaBeans)、JMS(Java Message Service)等,为企业应用提供基础架构。 2. **Java EE 兼容性测试套件**:确保Java EE产品(如应用服务器...
1.3 JMS 规范的变迁 4 2.ActiveMQ 4 2.1 Broker 4 2.1.1 运行Broker 4 2.1.2 嵌入式Broker 4 2.1.3 监控Broker 5 2.2 Transport 9 2.2.1 VM Transport 9 2.2.2 TCP Transport 10 2.2.3 Failover ...
#### 2.4 前瞻性 考虑到未来可能的技术更新和需求变化,架构应具备前瞻性,支持新技术的集成和系统的持续升级。 #### 2.5 安全性 安全性是J2EE架构不可或缺的一部分,包括数据安全、访问控制、事务处理等多个方面...
3. **geronimo-spec-servlet-2.4-rc1.jar**:实现了Servlet 2.4规范,是Web服务器和Java应用程序之间交互的基础,可能用于ActiveMQ的Web管理界面。 4. **geronimo-spec-jsp-2.0-rc1.jar**:提供了JavaServer Pages...
2.4 容器 2.5 资源适配器 2.6 数据库 2.7 Java EE标准服务 2.8 互用性 2.9 产品标准的灵活性 2.10 Java EE产品的扩展 2.11 平台角色 2.12 平台协议 2.13 J2EE 1.3中的变化 2.14 J2EE 1.4中的变化 2.15 Java EE 5...
**2.4 用户验证的必要条件** - 使用HTTP基本认证或表单登录等方式进行用户验证。 **2.5 授权条件** - 定义角色和权限来控制访问。 **2.6 部署标准** - 在部署描述符中定义安全约束。 **2.7 未来的方向** Java...
**2.4 规格化消息交换** - 规格化消息交换机制是JBI的核心,它定义了如何在组件间传递消息。 **2.5 管理** - 包括组件安装、生命周期管理、服务单元部署等方面,确保系统的稳定运行。 **2.6 组件框架** - 提供了...
2.4 JMS(Java Message Service) Resin通过`com.caucho.jms`包实现了JMS接口,允许应用进行消息传递。`MessageServer`类是消息服务的核心,处理消息的生产、消费和队列管理。 2.5 JDBC和JTA Resin支持JDBC数据源和...
ActiveMQ是Apache软件基金会开发的一款开源消息代理,它实现了JMS规范,提供了高效、可靠的消息传递能力。JMS则是一种标准接口,使得应用程序可以与不同的消息中间件进行交互,确保消息的可靠传输。 2. 测试环境...
- **Java消息服务 (JMS)**:实现了异步通信。 - **Java命名和目录接口 (JNDI)**:用于查找和定位服务。 - **JavaMail**:支持电子邮件发送。 - **JavaBean活动框架 (JAF)**:用于构建组件模型。 - **XML处理**:提供...
在J2EE 1.4中,Servlet 2.4规范被引入,提供了对动态内容生成、会话管理、过滤器和监听器的支持。Servlet 2.4改进了生命周期方法,增加了对异步处理的支持,并引入了web.xml的简化配置。 2. **JSP(JavaServer ...
- **Java消息服务 (JMS)**:用于实现消息中间件。 - **Java命名和目录接口 (JNDI)**:提供查找和定位服务的能力。 - **JavaMail**:支持电子邮件发送。 - **JavaBean活动框架 (JAF)**:用于构建JavaBeans组件。 - **...