维基百科,自由的百科全书php
Java消息服务(Java Message Service,JMS)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通讯。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。html
Java消息服务的规范包括两种消息模式,点对点和发布者/订阅者。许多提供商支持这一通用框架所以,程序员能够在他们的分布式软件中实现面向消息的操做,这些操做将具备不一样面向消息中间件产品的可移植性。java
Java消息服务支持同步和异步的消息处理,在某些场景下,异步消息是必要的;在其余场景下,异步消息比同步消息操做更加便利。程序员
Java消息服务支持面向事件的方法接收消息,事件驱动的程序设计如今被普遍认为是一种富有成效的程序设计范例,程序员们都至关熟悉。web
在应用系统开发时,Java消息服务能够推迟选择面对消息中间件产品,也能够在不一样的面对消息中间件切换。api
[隐藏] 服务器
Java消息服务是一个在 Java标准化组织(JCP)内开发的标准(代号JSR 914)。2001年6月25日,Java消息服务发布JMS 1.0.2b,2002年3月18日Java消息服务发布 1.1,统一了消息域。架构
JMS由如下元素组成。并发
JMS提供者oracle
链接面向消息中间件的,JMS接口的一个实现。提供者能够是Java平台的JMS实现,也能够是非Java平台的面向消息中间件的适配器。
JMS客户
生产或消费消息的基于Java的应用程序或对象。
JMS生产者
建立并发送消息的JMS客户。
JMS消费者
接收消息的JMS客户。
JMS消息
包括能够在JMS客户之间传递的数据的对象
JMS队列
一个容纳那些被发送的等待阅读的消息的区域。队列暗示,这些消息将按照顺序发送。一旦一个消息被阅读,该消息将被从队列中移走。
JMS主题
一种支持发送消息给多个订阅者的机制。
Java消息服务应用程序结构支持两种模型:
在点对点或队列模型下,一个生产者向一个特定的队列发布消息,一个消费者从该队列中读取消息。这里,生产者知道消费者的队列,并直接将消息发送到消费者的队列。这种模式被归纳为:
发布者/订阅者模型支持向一个特定的消息主题发布消息。0或多个订阅者可能对接收来自特定消息主题的消息感兴趣。在这种模型下,发布者和订阅者彼此不知道对方。这种模式比如是匿名公告板。这种模式被归纳为:
使用Java语言,JMS提供了将应用与提供数据的传输层相分离的方式。同一组Java类能够经过JNDI中关于提供者的信息,链接不一样的JMS提供者。这一组类首先使用一个链接工厂以链接到队列或主题,而后发送或发布消息。在接收端,客户接收或订阅这些消息。
Java消息服务的API在javax.jms
包中提供。
ConnectionFactory
接口(链接工厂)[编辑]用户用来建立到JMS提供者的链接的被管对象。JMS客户经过可移植的接口访问链接,这样当下层的实现改变时,代码不须要进行修改。 管理员在JNDI名字空间中配置链接工厂,这样,JMS客户才可以查找到它们。根据消息类型的不一样,用户将使用队列链接工厂,或者主题链接工厂。
Connection
接口(链接)[编辑]链接表明了应用程序和消息服务器之间的通讯链路。在得到了链接工厂后,就能够建立一个与JMS提供者的链接。根据不一样的链接类型,链接容许用户建立会话,以发送和接收队列和主题到目标。
Destination
接口(目标)[编辑]目标是一个包装了消息目标标识符的被管对象,消息目标是指消息发布和接收的地点,或者是队列,或者是主题。JMS管理员建立这些对象,而后用户经过JNDI发现它们。和链接工厂同样,管理员能够建立两种类型的目标,点对点模型的队列,以及发布者/订阅者模型的主题。
MessageConsumer
接口(消息消费者)[编辑]由会话建立的对象,用于接收发送到目标的消息。消费者能够同步地(阻塞模式),或异步(非阻塞)接收队列和主题类型的消息。
MessageProducer
接口(消息生产者)[编辑]由会话建立的对象,用于发送消息到目标。用户能够建立某个目标的发送者,也能够建立一个通用的发送者,在发送消息时指定目标。
Message
接口(消息)[编辑]是在消费者和生产者之间传送的对象,也就是说从一个应用程序创送到另外一个应用程序。一个消息有三个主要部分:
消息接口很是灵活,并提供了许多方式来定制消息的内容。
Session
接口(会话)[编辑]表示一个单线程的上下文,用于发送和接收消息。因为会话是单线程的,因此消息是连续的,就是说消息是按照发送的顺序一个一个接收的。会话的好处是它支持事务。若是用户选择了事务支持,会话上下文将保存一组消息,直到事务被提交才发送这些消息。在提交事务以前,用户可使用回滚操做取消这些消息。一个会话容许用户建立消息生产者来发送消息,建立消息消费者来接收消息。
要使用Java消息服务,你必需要有一个JMS提供者,管理会话和队列。如今既有开源的提供者也有专有的提供者。
开源的提供者包括:
专有的提供者包括:
一个详尽的JMS提供者对比矩阵能够在这里看到。
若是你计划在一个服务器集群中运行你的程序,你须要检查提供者是否实现了对负载均衡和故障恢复的支持。