2.4 JMS规范
就像前面提到的,JMS规范定义了两种客户端--JMS客户端和非JMS客户端。它们之间的区别必须简单讨论下。
2.4.1 JMS客户端
JMS客户端使用JMS API与JMS提供者交互。就像使用JDBC API去访问关系数据库一样,JMS客户端使用JMS API作为消息驱动服务的标准访问方式。许多JMS提供者(包括ActiveMQ)包含了很多超出JMS规范要求的特性。值得一提的是一个100%JMS客户端只能使用JMS提供的API,必须避免使用额外的特性。不过一般选择哪个JMS provider通常是由它提供的额外特性决定的。所以,一个使用了额外特性的JMS客户端,如果不重构,可能就不能用于其它JMS provider。
JMS clients使用MessageProducer(消息生产者)和MessageConsumer(消息消费者)接口。JMS provider必须提供这些接口的实现。JMS client如果发送消息,那么它就是producer(生产者),如果接收消息,那么它就是Consumer(消费者)。JMS client也有可能同时发送和接收消息。
JMS PRODUCERS
JMS clients使用JMS MessageProducer类来发送消息到一个destination。当调用Session.createProducer产生一个producer时,将会有默认的destination。不过这个可以通过重写MessageProducer.send()方法来改变。MessageProducer接口如下所示。
Listing 2.1 The MessageProducer interface
public interface MessageProducer {
void setDisableMessageID(boolean value) throws JMSException;
boolean getDisableMessageID() throws JMSException;
void setDisableMessageTimestamp(boolean value) throws JMSException;
boolean getDisableMessageTimestamp() throws JMSException;
void setDeliveryMode(int deliveryMode) throws JMSException;
int getDeliveryMode() throws JMSException;
void setPriority(int defaultPriority) throws JMSException;
int getPriority() throws JMSException;
void setTimeToLive(long timeToLive) throws JMSException;
long getTimeToLive() throws JMSException;
Destination getDestination() throws JMSException;
void close() throws JMSException;
void send(Message message) throws JMSException;
void send(Message message, int deliveryMode, int priority,
long timeToLive)
throws JMSException;
void send(Destination destination, Message message)
throws JMSException;
void send(
Destination destination,
Message message,
int deliveryMode,
int priority,
long timeToLive)
throws JMSException;
}
MessageProducer提供了发送消息的和设置消息头部的方法。消息头部设置包括JMSDeliveryMode(投递类型),JMSPriority(优先级),JMSExpiration(有效期,通过get/setTimeLive()设置)以及一个同时设置前面三种消息头的方法send()。这些消息头部将在2.4.5讲解。
JMS CONSUMERS
JMS客户端使用JMS MessageConsumer类从一个destionation消费消息。它可以通过receive()方法同步地消费消息,也可以通过提供一个MessageListener实现来异步地消费消息。MessageListener.onMessage()方法会在消息到达destination时被调用。MessageConsumer接口如下所示。
Listing 2.2 The JMS MessageConsumer interface
public interface MessageConsumer {
String getMessageSelector() throws JMSException;
MessageListener getMessageListener() throws JMSException;
void setMessageListener(MessageListener listener) throws JMSException;
Message receive() throws JMSException;
Message receive(long timeout) throws JMSException;
Message receiveNoWait() throws JMSException;
void close() throws JMSException;
}
接口中没有方法为MessageConsumer设置destination。事实上,destination会在使用Session.createConsumer()创建Consumer的时候被设置。
2.4.2 Non-JMS clients
就像先前提到的Non-JMS客户端使用JMS provider本地的客户端API,而不是使用JMS API。这是个重要的区别,因为本地的客户端API可能提供一些不同的特性。这类本地non-JMS API能够在Java RMI上面使用CORBA IIOP协议或其它一些本地协议。在JMS规范出来之前的一些消息provider通常有本地的客户端API,之后,也有很多JMS provider提供本地的API。
2.4.3 The JMS provider
JMS provider是一个由供应商提供的JMS API实现。它们提供标准的JMS API来访问MOM。(这和JDBC类似)
2.4.4 The JMS message
JMS消息是JMS规范最重要的一个概念。JMS规范所有其它概念都是围绕消息处理而建立的,因为消息是商业数据和事件的载体。JMS消息能够传输任何的数据,包括文本,二进制数和以及在消息头的信息等。如何2.5,JMS消息包含两部分,包括消息头和负载(payload)。消息头为客户端和JMS provider提供消息的元数据。payload事实上就是消息体,可以通过各种消息类型,存放文本和二进制数据。
JMS消息被设计为容易理解和变通。所有复杂的东西都留在消息头部。
- 大小: 19 KB
分享到:
相关推荐
JMS规范定义了与平台无关的API,这使得开发者可以编写一次代码,然后在任何支持JMS的平台上运行。这意味着JMS客户端程序能够轻松地在不同的操作系统和硬件架构之间迁移,只需确保目标环境有相应的JMS提供者即可。 *...
### JMS规范1.1(中文版)关键知识点解析 #### 一、引言 **1.1 摘要** - **主要内容:** 该规范详细介绍了Java消息服务(Java Message Service,简称JMS)的目标及其核心功能。JMS为Java开发者提供了一套统一的...
### JMS规范详解 #### 一、JMS基础概览 ...总之,JMS规范提供了一个强大且灵活的消息传递框架,适用于构建复杂的企业级应用。通过对JMS规范的深入理解,开发者能够更有效地利用其特性,实现高效、可靠的消息通信。
### JMS规范教程知识点解析 #### 一、JMS基本概念 **1.1 什么是JMS(JAVA MESSAGE SERVICE)?** JMS,即Java Message Service,是Java平台中的消息服务应用标准,它允许应用程序组件生成、发送、接收以及读取...
2. **Java EE 兼容性测试套件**:确保Java EE产品(如应用服务器)遵循规范,通过一系列测试来验证产品的兼容性。 3. **Java EE 可参考的实现**:这是一个示例实现,提供了Java EE平台定义的功能,供开发者参考和...
J2EE架构基于一系列Java EE标准技术,如Servlet、JSP、EJB、JMS、JTA等,为多层分布式应用程序提供基础服务。 ### 4. J2EE架构层次划分 #### 4.1 客户层(CLIENT TIER) 客户层通常由浏览器或其他轻量级客户端组成...
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 ...
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 JMS(Java Message Service) Resin通过`com.caucho.jms`包实现了JMS接口,允许应用进行消息传递。`MessageServer`类是消息服务的核心,处理消息的生产、消费和队列管理。 2.5 JDBC和JTA Resin支持JDBC数据源和...
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...
#### 一、JBI规范概览 **1.1 定义** JBI(Java Business Integration)规范是由Java Community Process (JCP)组织发布的一套标准,旨在为Java平台上的业务集成提供统一的框架。它允许不同的应用程序和服务以一种...
ActiveMQ是Apache软件基金会开发的一款开源消息代理,它实现了JMS规范,提供了高效、可靠的消息传递能力。JMS则是一种标准接口,使得应用程序可以与不同的消息中间件进行交互,确保消息的可靠传输。 2. 测试环境...
Servlet 2.4规范带来了许多改进,包括支持更多类型的过滤器、更好的会话管理以及更强的安全性。 2. **JSP 2.0** - JSP(JavaServer Pages)是一种动态网页技术,JSP 2.0增加了EL(Expression Language)和自定义...
- **Java消息服务 (JMS)**:实现了异步通信。 - **Java命名和目录接口 (JNDI)**:用于查找和定位服务。 - **JavaMail**:支持电子邮件发送。 - **JavaBean活动框架 (JAF)**:用于构建组件模型。 - **XML处理**:提供...
JMS规范定义了一系列标准接口,以便开发者能够在不同的JMS实现之间进行互换。 ##### 4.1 JMS消息模型 JMS消息主要由三部分组成:头部、属性和主体。 - **头部**:包含了消息的元数据信息,如消息ID、时间戳等。 -...
**2.4 用户验证的必要条件** - 使用HTTP基本认证或表单登录等方式进行用户验证。 **2.5 授权条件** - 定义角色和权限来控制访问。 **2.6 部署标准** - 在部署描述符中定义安全约束。 **2.7 未来的方向** Java...