JMS
Java消息服务(Java Message Service,JMS)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。
优点
消息传送机制具有以下优点:
1)可以实现异构集成,不同平台、不同语言的系统可以通过消息进行通信,实现集成。例如,ActiveMQ支持多语言,除Java以外,还包括C、PHP、Python。
2)可以缓解系统瓶颈,当系统同步处理的请求数量增大时,会造成请求阻塞,如果使用消息传送机制,可以将请求以消息方式发送至消息服务器,并由多个请求处理模块接收消息进行并发处理。
3)可以提高可伸缩性,这个与缓解系统瓶颈类似,通过增加或减少消息接收者来控制并发处理的能力,提高可伸缩性。
4)可以提高最终用户生产率,这是因为使用消息传送机制时,可以对请求进行异步处理,请求以消息方式发送至消息服务器后,最终用户无需同步等待请求返回结果。
5)体系结构灵活性和敏捷性,我们知道系统设计的一个基本原则就是高内聚、低耦合,通过引入消息传送机制,各系统服务以消息的形式抽象出来,减少系统之间的耦合,提高系统结构灵活性和敏捷性。
JMS中的角色
JMS由以下元素组成:
JMS提供者
连接面向消息中间件的,JMS接口的一个实现。提供者可以是Java平台的JMS实现,也可以是非Java平台的面向消息中间件的适配器。
JMS客户
生产或消费消息的基于Java的应用程序或对象。
JMS生产者
创建并发送消息的JMS客户。
JMS消费者
接收消息的JMS客户。
JMS消息
包括可以在JMS客户之间传递的数据的对象
JMS队列
一个容纳那些被发送的等待阅读的消息的区域。队列暗示,这些消息将按照顺序发送。一旦一个消息被阅读,该消息将被从队列中移走。
JMS主题
一种支持发送消息给多个订阅者的机制。
JMS模型
Java消息服务应用程序结构支持两种模型:
1.点对点或队列模型
2.发布/订阅模型
点对点或队列模型
在点对点或队列模型下,一个生产者向一个特定的队列发布消息,一个消费者从该队列中读取消息。这里,生产者知道消费者的队列,并直接将消息发送到消费者的队列。
这种模式被概括为:
1)只有一个消费者将获得消息
2)生产者不需要在接收者消费该消息期间处于运行状态,接收者也同样不需要在消息发送时处于运行状态。
3)每一个成功处理的消息都由接收者签收
点对点或队列模型
发布者/订阅者模型支持向一个特定的消息主题发布消息。0或多个订阅者可能对接收来自特定消息主题的消息感兴趣。在这种模型下,发布者和订阅者彼此不知道对方。这种模式好比是匿名公告板。
这种模式被概括为:
1)多个消费者可以获得消息
2)在发布者和订阅者之间存在时间依赖性。发布者需要建立一个订阅(subscription),以便客户能够购订阅。订阅者必须保持持续的活动状态以接收消息,除非订阅者建立了持久的订阅。在那种情况下,在订阅者未连接时发布的消息将在订阅者重新连接时重新发布