消息中间件 — JMS规范

Posted 牛觅技术

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了消息中间件 — JMS规范相关的知识,希望对你有一定的参考价值。

JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。

JMS的优势

  • 异步:要接收消息,客户端不需要发送请求。消息将自动到达客户端。

  • 可靠:它提供保证消息被传递。


JMS架构

JMS应用程序由以下部分组成:

  • A JMS provider: A messaging system that implements the JMS specification.

  • JMS clients: Java applications that send and receive messages.

  • Messages: Objects that are used to communicate information between JMS clients.

  • Administered objects: Preconfigured JMS objects that are created by an administrator for the use of JMS clients.


消息传递模型

JMS支持两种不同的消息传递模型:

1、Point-to-Point(P2P)

2、Publish/Subscribe(Pub/Sub)

P2P模型

在P2P模型中,一条消息仅传递给一个接收者。队列负责保存该消息,直到接收器准备就绪。

在这里,队列被用作面向消息的中间件(MOM)。

P2P的特点:

  1. 每个消息只有一个消费者(Consumer)(即一旦被消费,消息就不再在消息队列中)。

  2. 提供者和消费者之间在时间上没有依赖性,也就是说当提供者发送了消息之后,不管消费者有没有正在运行,它不会影响到消息被发送到队列。

  3. 每条消息仅会传送给一个消费者。可能会有多个消费者在一个队列中侦听,但是每个队列中的消息只能被队列中的一个消费者所消费。

  4. 消息存在先后顺序。一个队列会按照消息服务器将消息放入队列中的顺序,把它们传送给消费者。当已被消费时,就会从队列头部将它们删除(除非使用了消息优先级)。

  5. 消费者在成功接收消息之后需向队列应答成功。

PS:如果你希望发送的每个消息都应该被成功处理的话,那么你需要P2P模式。

Publish/Subscribe

在Pub / Sub模型中,一条消息被传递给所有订阅者。这就像广播。在这里,主题被用作负责保存和传递消息的面向消息的中间件。

消息中间件 — JMS规范

Publish/Subscribe的特点:

  1. 每个消息可以有多个消费者;

  2. 发布者和订阅者之间有时间上的依赖性。针对某个主题的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息,而且为了消费消息,订阅者必须保持运行的状态。

  3. 为了缓和这样严格的时间相关性,JMS允许订阅者创建一个可持久化的订阅。这样,即使订阅者没有被激活(运行),它也能接收到发布者的消息。

  4. 每条消息都会传送给称为订阅者的多个消息消费者。订阅者有许多类型,包括持久型、非持久型和动态型。

  5. 发布者通常不会知道、也意识不到哪一个订阅者正在接收主题消息。

  6. 消息被推送给消费者,这意味着消息会传送给消费者,而无须请求。

JMS编程模式


以上是关于消息中间件 — JMS规范的主要内容,如果未能解决你的问题,请参考以下文章

ActiviMQ

Jms规范学习

JMS的基本概念

ActiveMQ——理解和掌握JMS

ActiveMQ(02):JMS基本概念和模型

JMS基本概念