定义:
JMS(Java Messaging Service)是Java平台上有关面向消息中间件的技术规范,它便于消息系统中的Java应用程序进行消息交换,并且通过提供标准的产生、发送、接收消息的接口简化企业应用的开发,翻译为Java消息服务。
简介:
JMS是一种与厂商无关的 API,用来访问消息收发系统。它类似于 JDBC(Java Database
Connectivity):这里,JDBC 是可以用来访问许多不同关系数据库的 API,而 JMS
则提供同样与厂商无关的访问方法,以访问消息收发服务。许多厂商目前都支持 JMS,包括 IBM 的 MQSeries、BEA的 Weblogic
JMS service和 Progress 的 SonicMQ,这只是几个例子。 JMS
使您能够通过消息收发服务(有时称为消息中介程序或路由器)从一个 JMS 客户机向另一个 JML 客户机发送消息。消息是 JMS
中的一种类型对象,由两部分组成:报头和消息主体。报头由路由信息以及有关该消息的元数据组成。消息主体则携带着应用程序的数据或有效负载。根据有效负载
的类型来划分,可以将消息分为几种类型,它们分别携带:简单文本 (TextMessage)、可序列化的对象
(ObjectMessage)、属性集合 (MapMessage)、字节流 (BytesMessage)、原始值流
(StreamMessage),还有无有效负载的消息 (Message)。
历史:
Java消息服务是一个在 Java标准化组织(JCP)内开发的标准(代号JSR 914)。2001年6月25日,Java消息服务发布JMS 1.0.2b,2002年3月18日Java消息服务发布 1.1,统一了消息域。
体系架构:
JMS有以下元素组成。
JMS提供者
连接面向消息中间件的,JMS接口的一个实现。提供者可以是Java平台的JMS实现,也可以是非Java平台的面向消息中间件的适配器。
JMS客户
生产或消费消息的基于Java的应用程序或对象。
JMS生产者
创建并发送消息的JMS客户。
JMS消费者
接收消息的JMS客户。
JMS消息
包括可以在JMS客户之间传递的数据的对象
JMS队列
一个容纳那些被发送的等待阅读的消息的区域。队列暗示,这些消息将按照顺序发送。一旦一个消息被阅读,该消息将被从队列中移走。
JMS主题
一种支持发送消息给多个订阅者的机制。
JMS模型
:
Java消息服务应用程序结构支持两种模型:
点对点或队列模型
发布者/订阅者模型
在点对点或队列模型下,一个生产者向一个特定的队列发布消息,一个消费者从该队列中读取消息。这里,生产者知道消费者的队列,并直接将消息发送到消费者的队列。这种模式被概括为:
只有一个消费者将获得消息
生产者不需要在接收者消费该消息期间处于运行状态,接收者也同样不需要在消息发送时处于运行状态。
每一个成功处理的消息都由接收者签收
发布者/订阅者模型支持向一个特定的消息主题发布消息。0或多个订阅者可能对接收来自特定消息主题的消息感兴趣。在这种模型下,发布者和订阅者彼此不知道对方。这种模式好比是匿名公告板。这种模式被概括为:
多个消费者可以获得消息
在发布者和订阅者之间存在时间依赖性。发布者需要建立一个订阅(subscription),以便客户能够购订阅。订阅者必须保持持续的活动状态以接收消息,除非订阅者建立了持久的订阅。在那种情况下,在订阅者未连接时发布的消息将在订阅者重新连接时重新发布。
使用Java语言,JMS提供了将应用与提供数据的传输层相分离的方式。同一组Java类可以通过JNDI中关于提供者的信息,连接不同的JMS提供者。这一组类首先使用一个连接工厂以连接到队列或主题,然后发送或发布消息。在接收端,客户接收或订阅这些消息。
传递消息方式:
JMS现在有两种传递消息的方式。标记为NON_PERSISTENT的消息最多投递一次,而标记为PERSISTENT的消息将使用暂存后再转送的机理
投递。如果一个JMS服务离线,那么持久性消息不会丢失但是得等到这个服务恢复联机时才会被传递。所以默认的消息传递方式是非持久性的。即使使用非持久性
消息可能降低内务和需要的存储器,并且这种传递方式只有当你不需要接收所有的消息时才使用。
虽然JMS规范并不需要JMS供应商实现消息的优
先级路线,但是它需要递送加快的消息优先于普通级别的消息。JMS定义了从0到9的优先级路线级别,0是最低的优先级而9则是最高的。更特殊的是0到4是
正常优先级的变化幅度,而5到9是加快的优先级的变化幅度。举例来说: topicPublisher.publish (message,
DeliveryMode.PERSISTENT, 8, 10000); //Pub-Sub 或
queueSender.send(message,DeliveryMode.PERSISTENT, 8, 10000);//P2P
这个代码片断,有两种消息模型,映射递送方式是持久的,优先级为加快型,生存周期是10000 (以毫秒度量
)。如果生存周期设置为零,这则消息将永远不会过期。当消息需要时间限制否则将使其无效时,设置生存周期是有用的。
JMS定义了五种不同的消息正文格式,以及调用的消息类型,允许你发送并接收以一些不同形式的数据,提供现有消息格式的一些级别的兼容性。
· StreamMessage -- Java原始值的数据流
· MapMessage -- 一套名称-值对
· TextMessage -- 一个字符串对象
· ObjectMessage -- 一个序列化的 Java对象
· BytesMessage -- 一个未解释字节的数据流
JMS应用程序接口:
ConnectionFactory 接口(连接工厂)
用户用来创建到JMS提供者的连接的被管对象。JMS客户通过可移植的接口访问连接,这样当下层的实现改变时,代码不需要进行修改。
管理员在JNDI名字空间中配置连接工厂,这样,JMS客户才能够查找到它们。根据消息类型的不同,用户将使用队列连接工厂,或者主题连接工厂。
Connection 接口(连接)
连接代表了应用程序和消息服务器之间的通信链路。在获得了连接工厂后,就可以创建一个与JMS提供者的连接。根据不同的连接类型,连接允许用户创建会话,以发送和接收队列和主题到目标。
Destination 接口(目标)
目标是一个包装了消息目标标识符的被管对象,消息目标是指消息发布和接收的地点,或者是队列,或者是主题。JMS管理员创建这些对象,然后用户通过
JNDI发现它们。和连接工厂一样,管理员可以创建两种类型的目标,点对点模型的队列,以及发布者/订阅者模型的主题。
MessageConsumer 接口(消息消费者)
由会话创建的对象,用于接收发送到目标的消息。消费者可以同步地(阻塞模式),或异步(非阻塞)接收队列和主题类型的消息。
MessageProducer 接口(消息生产者)
由会话创建的对象,用于发送消息到目标。用户可以创建某个目标的发送者,也可以创建一个通用的发送者,在发送消息时指定目标。
Message 接口(消息)
是在消费者和生产者之间传送的对象,也就是说从一个应用程序创送到另一个应用程序。一个消息有三个主要部分:
消息头(必须):包含用于识别和为消息寻找路由的操作设置。
一组消息属性(可选):包含额外的属性,支持其他提供者和用户的兼容。可以创建定制的字段和过滤器(消息选择器)。
一个消息体(可选):允许用户创建五种类型的消息(文本消息,映射消息,字节消息,流消息和对象消息)。
消息接口非常灵活,并提供了许多方式来定制消息的内容。
Session 接口(会话)
表示一个单线程的上下文,用于发送和接收消息。由于会话是单线程的,所以消息是连续的,就是说消息是按照发送的顺序一个一个接收的。会话的好处是它支持
事务。如果用户选择了事务支持,会话上下文将保存一组消息,直到事务被提交才发送这些消息。在提交事务之前,用户可以使用回滚操作取消这些消息。一个会话
允许用户创建消息生产者来发送消息,创建消息消费者来接收消息。
分享到:
相关推荐
此外,用户可以使用WebLogic的Configuration Wizard工具进行JMS相关配置。 消息桥是JMS提供的一种机制,通过它可以与外部消息提供商实现即插即用的集成。消息桥支持采用MQ适配器实现全面的MQJMS支持。同时,消息桥...
通过阅读《有关JMS的一点看法》、《Apache Geronimo的JMS实现:ActiveMQ》等文章,我们可以深入理解JMS的使用场景、优缺点以及最佳实践。同时,《JAVA基础:什么是JMS》和《JMS简介》等资料可以帮助我们系统地了解...
在这个"JMS相关的Source"中,我们可以看到是关于JMS与JBoss应用服务器以及Spring框架集成的代码示例。 首先,JBoss是一个开源的应用服务器,它支持多种Java EE规范,包括JMS。在Jboss中,JMS服务通常通过 HornetQ ...
在**学习笔记** 中,可能详细记录了学习JMS的过程,包括理解JMS的基本概念、设置开发环境、编写代码示例、遇到的问题及解决策略,还有可能对如何应用JMS在实际项目中进行了探讨。 通过阅读**jms学习笔记.docx** 和 ...
**JMS学习教程概述** Java消息服务(Java Message Service,简称JMS)是Java平台中用于企业级应用间异步通信的一种标准API。它允许应用程序创建、发送、接收和读取消息,为分布式系统提供了可靠的、跨平台的通信...
在描述中提到的接收端和发送端的部署步骤,主要是创建Spring配置文件(如`spring-jms.xml`)来管理JMS相关的bean,以及在`web.xml`中配置监听器以加载这些配置。这些配置文件定义了消息的生产者和消费者,以及它们...
标题中的"jms.rar_jar j_java jms_jms_jms jar_jms.j"可能是指一个包含JMS相关代码和资源的压缩文件,其中包含了`.jar`文件,可能是实现JMS功能的库或示例代码。"jms.jar"可能是一个封装了JMS API的Java类库,而"jms...
“工具”标签则可能意味着ActiveMQ作为工具被介绍,同时博主可能也提到了其他与JMS相关的工具或库。 **文件名称列表:** 1. **JMS、XML和异构企业--使用JMS和XML来促进企业应用的互操作性.doc** - 这份文档可能...
由于标签包含了“源码”和“工具”,这篇博文可能深入解析了JMS的实现细节,或者介绍了与JMS相关的开发工具,如消息代理(message broker)如Apache ActiveMQ、RabbitMQ等,或者是用于测试和调试JMS的工具。...
2. 配置JMS资源:在JBOSST的配置文件(如standalone.xml或domain.xml)中,需要添加JMS相关的配置,包括连接工厂、队列和主题等。 三、创建JMS应用 1. 创建JMS模块:在JBOSST中,JMS模块定义了消息服务的配置,包括...
在本文中,我们将深入探讨如何使用...这个实例对于学习和理解JMS以及如何在实际项目中应用它是很有帮助的。通过这个实例,开发者可以进一步掌握异步通信、消息中间件的使用,以及Spring MVC和ActiveMQ的整合技巧。
在提供的“jms英文书小合集”中,我们可以预见到一系列关于JMS的详细学习资源,包括`javaMail`、`JMS`以及`ActiveMQ`的相关书籍。这些书籍将深入探讨以下几个关键知识点: 1. **JavaMail**: JavaMail是Java编程语言...
JMS实例代码通常会涉及到异常处理,如JMSException和其他相关的运行时异常,确保在出现问题时能够优雅地处理错误。此外,为了提高性能和可用性,可以使用事务管理(Session的TRANSACTED或CLIENT_ACKNOWLEDGE模式)...
本项目提供的下载资料可能包含Spring配置文件、Java源代码、测试脚本等,可以帮助学习者了解如何在实际项目中使用Spring与WebLogic JMS的集成。通过深入研究这些文件,你可以了解到如何在企业级环境中利用消息队列...
JMS提供者负责消息的存储、转发以及相关管理功能。 4. **管理对象**:这些是预定义的JMS对象,客户使用它们进行消息的发送和接收。 #### 四、JMS的高级接口 JMS定义了一系列高级接口来封装各种消息的概念。这些接口...
- **配置文件**:如`applicationContext.xml`,可能包含Spring和JMS的相关配置。 - **Java类**:可能有消息生产者、消费者类,以及可能的业务逻辑类。 - **测试类**:用于验证消息发送和接收功能的正确性。 5. *...
2. `applicationContext.xml`:Spring的配置文件,定义了bean的定义和它们之间的依赖关系,包括JMS相关的配置。 3. 消息生产者类:使用`JmsTemplate`或自定义`MessageProducer`发送消息到队列或主题。 4. 消息消费者...
这份"JMS1.1规范 中文版"的文档无疑是学习JMS的重要参考资料,尤其对于那些不熟悉英文原版规范的中文读者来说,更是宝贵的资源。 JMS的核心概念包括消息生产者、消息消费者和消息代理。消息生产者是发布消息的应用...
本教程通过视频形式深入讲解了ActiveMQ的使用和JMS规范的相关知识。 Java消息服务(JMS)是Java平台中用于企业级应用集成的API,它定义了一组标准接口,使得应用程序可以与各种消息队列系统进行交互。JMS的核心概念...
标题中的"JMS所需jar包"指的是实现JMS规范所必需的库文件,这些jar包通常包含了JMS API和其他相关的类库,使得开发者可以在Java环境中使用JMS功能。在描述中提到的"官方最新版 JMS 5.11jar包",可能是指ActiveMQ的一...