在开始之前需要说明,为了理解本文,我们希望读者拥有Java编程的相当坚实的基础。我们将试图尽可能简单地解释什么是JMS,但是在你能够建立自己的程序并正确地理解它们之前,你需要有一些使用JNDI开发实际应用程序的经验。
JMS(Java消息服务)是一个消息交换标准,它答应使用J2EE应用程序组件建立、发送、接收和读取消息。它假设分布式通讯拥有自由(free)的连接、是可靠的(reliable)和异步的(asynchronous)。
Exchange(交换)系统
消息交换反映了程序组件或应用程序之间的一种交互作用。消息交换系统是一种类似于下的系统:一个相似系统的客户端可以发送和接收任何其它客户端的消息。每个客户端都并入系统的代理中,它提供了建立、发送、接收和读取消息的可能。
交换系统使得分布式的交互操作成为可能。组件在目的地(Destination)发送消息,收件人也可以在相同的目的地中得到这个消息。发送者和收件人不一定是互相熟悉的。换句话说,它并没有强迫发送者知道一些收件人的信息,也没有强迫收件人知道某些发送者的信息。发送者和收件人只需要知道消息的格式以及要到达的目的地。在这种情形下,上述的系统不同于与它紧密相连的一些技术,例如远程方法调用(RMI),它只要求开发人员了解RMI中的一些方法。
消息传递系统
消息传递系统是一种分布式的系统,是基于系统组件之间的异步消息交换。面向消息的中间件(Message-Oriented Middleware,MOM)就是这种产品,消息传递系统是在它的原理上建立的。
消息传递系统应用软件不会直接地通讯(这与传统的系统(基于RMI的)形成鲜明的对照),而需要依靠MOM的帮助。假如系统的某个组件希望给另一个组件发送消息,它将把给定的消息发送给MOM,接着MOM把该消息发送给收件人。
与传统的基于RMI构建的系统相比,它有以下优点:
· 发送消息的应用程序不需要期待回应,可以继续执行。
· 没有强迫发送消息的应用程序和特定消息的收件人在某个特定的时刻是激活的。假如消息的收件人不是激活的,MOM保证收件人一旦激活就立即收到该消息。
· 系统组件没有直接地彼此相连。它们被分离开了,这就是在运行时刻能把组件从一个主机传输到另一个、却不会中断系统可用性的原因。
消息交换模型:点对点模型和发表-预订模型
目前有两种“基本的”消息交换模型:点对点模型和发表-预订(pub-sub)模型。点对点模型应用于一个或多个组件(发送者)仅仅给一个组件收件人(接收者)发送消息的情形。这种模型是基于消息队列概念的:发送者把消息发送到队列中,接收者从该队列中读取消息。在点对点模型中,相同的队列上可能存在多个接收者,但是MOM只给其中一个传递消息。给哪一个传递消息依靠于MOM的实现(implementation)。
发表-预订模型应用于一个或多个组件(发表者)给一个或多个组件收件人(预订者)发送消息的情形。这种特定的模型是基于消息主题(message topic)概念的:发表者把消息发送到某个主题中,而该特定主题的预订者接收这些消息。
发表-预订模型看起来更加“优雅”,但是很多发表-预订模型不能保证消息按照发送的次序传递(它与点对点模型相反,点对点队列实现了FIFO(先进先出)原理)。因此,消息的次序很重要(或者为了同步需要使用消息的头和属性部分)的时候,就应该避免采用发表-预订模型。
Java消息服务(JMS)是使用面向消息中间件的一套Java API,它答应你的应用程序建立、发送、接收和读取消息。这组程序集位于J2EE程序包结构树上的javax.jms程序包中。JMS在很多MOM产品中得到了实现,其中iPlanet Message Queue、 IBM MQSeries、Progress Software SonicMQ、BEA WebLogic Server、Prism Technologies OpenFusion等最有名气,也存在一些免费的实现。
JMS同时支持消息交换的两种“基本的”模型。但是,其说明(specification)并没有要求厂商同时实现两种模型,尽管大多数JMS产品实现了点对点和发表-预订模型。
JMS应用程序
JMS应用程序的主要部分是:
· 产生连接的部分和目的地
· 连接
· 对话
· 产生消息的部分
· 使用消息的部分
· 消息
产生连接的部分(ConnectionFactory)是负责建立JMS连接的对象。每个ConnectionFactory都是QueueConnectionFactory或TopicConnectionFactory的一个副本(copy)。MOM治理器建立特定的对象,并把它与JNDI树关联起来,这样JMS客户端就能够使用标准的JNDI查找表得到ConnectionFactory的入口。在点对点的模型中,它使用了javax.jms.QueueConnectionFactory;在发表-预订模型中,它使用的是javax.jms.TopicConnectionFactory。
目的地(Destination)——它是队列或主题,这依靠于我们使用了下面哪种模型:javax.jms.Queue或javax.jms.Topic。
连接(Connection)——它可能是客户端和服务应用之间的开放的TCP/IP。它可以被用于建立一个或少量的对话。在你的应用程序能够接收消息前,你必须调用start()方法。为了暂停发送消息,你需要调用stop()。
对话(Session)——在JMS连接的帮助下建立的对象,被客户端用作发送和接收消息。
产生消息的部分(MessageProdUCer)——对话建立的对象,被用于在目的地中发送消息。
使用消息的部分(MessageConsumer)——对话建立的对象,用于接收消息。为了同步接收消息,需要使用receive()方法。对于异步的情形,使用MessageListener和唯一的方法——onMessage()。在该方法中,在定义的消息到达后应该执行一定的操作。
消息(Message)——消息本身。JMS消息由三个部分组成:
· 消息头
· 属性(不是必要的)
· 消息体(不是必要的)
本文没有解释更多的细节信息,你可以在官方文档中找到具体的细节。
什么时候使用EJB 2.0
请注重下述各项内容:
在新的EJB 2.0规范中,与JMS的集成是通过建立新的EJB类型——消息驱动Bean(MDB)来实现的。MDB的特性是客户端不会使用远程接口(remote interface)与它通讯。其交互操作的唯一途径是通过消息发送。MDB仅仅是消息监听程序,是一个实现了javax.ejb.MessageDrivenBean和javax.jms.MessageListener接口的类,没有任何其它的功能。其中的第一个接口只有两个方法:setMessageDrivenContext() 和ejbRemove()。第二个接口只有一个方法:onMessage()。这个规范还需要一个不带参数的ejbCreate()建立方法。客户端不会直接与MDB通讯;它不会建立MDB。容器(container)自身决定什么时候和需要多少个MDB来处理来自特定目的地的消息。MDB的主要缺陷是它只能从一个目的地接收到消息。
资料引用:http://www.knowsky.com/367917.html
分享到:
相关推荐
首先,**《利用JMS建立消息传递系统》** 这份文档会介绍如何使用JMS来构建一个消息传递系统的基本步骤。这包括创建消息生产者、消费者,以及设置消息代理(如ActiveMQ或RabbitMQ)等关键环节。读者将学会如何定义...
### JMS 教程 - 消息队列、消息服务 #### 企业级消息传递与JMS概述 在深入探讨JMS(Java消息服务)之前,我们先来了解下...通过理解这些概念和技术,开发者可以更好地利用JMS构建出高效、可靠的企业级消息服务系统。
JMS是一种标准,用于在分布式环境中传递消息,提供了一种可靠且异步的数据通信方式。在JBOSST中配置和使用JMS,可以实现应用程序间的解耦,提高系统的可扩展性和可靠性。 一、JMS基础知识 1. 概念理解:JMS是Java...
JMS允许应用程序通过消息传递模型进行异步通信,这在分布式系统中非常有用,可以提高系统的可伸缩性和可靠性。 在JMS中,主要有两种消息模式:点对点(Point-to-Point,P2P)和发布/订阅(Publish/Subscribe,Pub/...
这个项目为学习和理解JMS工作原理提供了宝贵的实践机会,你可以进一步探索TCP与HTTP接口的具体实现,以及如何利用JMS接口来构建高效的消息传递系统。同时,也可以尝试扩展其功能,比如添加HTTPS支持、实现更复杂的...
**JMS学习笔记精心总结** Java消息服务(Java Message Service,简称JMS)是Java平台中用于企业级应用间异步通信的一种标准接口。...通过深入学习和实践,我们可以更好地利用JMS来解决复杂系统的异步通信问题。
- **现存的消息系统:** 在JMS出现之前,不同的供应商提供了各自的消息中间件产品,这些产品通常有自己的API和编程模型,这导致了不同系统之间的互操作性问题。 - **JMS的目标:** JMS旨在为Java开发人员提供一种...
Java消息服务(Java Message Service,简称JMS)是Java平台中用于企业级应用间异步通信的标准接口。它为应用程序提供了一种...了解这些基本概念和应用场景,有助于你更好地理解和利用JMS来设计和实现可靠的分布式系统。
它允许应用程序通过消息传递在分布式系统中进行通信,从而实现解耦和提高可靠性。JMS不是实际的通信软件,而是一个接口,需要与支持JMS标准的中间件(如消息导向中间件MOM)配合使用。 **1. JMS基本概念** 1.1 **...
ActiveMQ是Apache软件基金会开发的一款开源消息中间件,它遵循Java消息服务...了解这些知识点后,你可以构建一个健壮的消息驱动系统,利用ActiveMQ和Spring JMS实现组件间的异步通信,提高系统的稳定性和可扩展性。
标题“JMS调用IBM MQ监听模式”涉及的是Java消息服务(Java Message Service,简称JMS)与IBM ...通过以上知识点的学习和实践,开发者能够有效地利用JMS和IBM MQ进行消息传递,实现高可用、高性能的分布式系统通信。
在实际开发中,通过导入jms-1.1.jar,开发者可以利用JMS API创建应用程序,将消息发送到消息队列(如ActiveMQ),从而实现应用间的异步通信和数据交换。这有助于提高系统的响应速度,降低高并发场景下的压力,并实现...
在"JMS sub/pub实现聊天系统"中,我们主要探讨的是如何利用JMS的发布/订阅(Publish/Subscribe)模型来构建一个聊天系统。 在JMS中,有两种消息传递模型:点对点(Point-to-Point)和发布/订阅(Publish/Subscribe...
总之,编码实现MQ连接池,是优化JMS消息发送性能的重要手段,它通过复用已建立的连接,减少了创建和销毁连接的开销,提高了系统效率。在实际应用中,应根据系统的负载和资源情况,合理配置连接池的大小,以达到最佳...
在Java开发中,JMS常用于解耦应用程序,使得组件之间可以通过消息传递进行通信,而无需直接相互依赖。 本示例“java-jms小例子”旨在演示JMS的基本用法。JMS的核心概念包括消息生产者、消息消费者和消息队列/主题。...
JMS是一种企业级消息传递规范,由Sun公司提出,它允许应用程序组件通过标准API进行消息传递服务。JMS支持两种消息传递模型:点对点(P2P)和发布/订阅(Pub/Sub)。 1. JMS的基本构建组件包括: - Broker(代理)...
整合Spring和JMS提供了开发者利用Java消息服务的强大功能的同时,降低了开发难度,使应用程序之间能够以松耦合的方式进行高效的消息传递和异步通信。通过上述知识点的详细解析,可以清晰地了解Spring框架如何集成JMS...
总结,一个简单的JMS客户端应用涉及到连接管理、会话创建、消息生产和消费等多个环节,利用JMS提供的API实现异步、可靠的通信。理解并掌握这些基本概念和操作是构建高效、可扩展的企业级应用的关键。
总之,JMS和ActiveMQ是企业级应用中不可或缺的组件,通过理解和熟练运用,开发者可以构建出高效、可靠且易于扩展的消息传递系统。通过提供的视频教程和源码,你可以逐步学习并掌握这一关键技术。
**JMS(Java Message Service)** 是Java平台上用于企业级应用间异步通信的一种标准接口。它为不同的消息中间件(Message...通过深入学习和实践,你可以构建出高效、可靠的分布式系统,利用JMS实现服务间的解耦和通信。