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的特点:
- 每个消息只有一个消费者(Consumer)(即一旦被消费,消息就不再在消息队列中)。
- 提供者和消费者之间在时间上没有依赖性,也就是说当提供者发送了消息之后,不管消费者有没有正在运行,它不会影响到消息被发送到队列。
- 每条消息仅会传送给一个消费者。可能会有多个消费者在一个队列中侦听,但是每个队列中的消息只能被队列中的一个消费者所消费。
- 消息存在先后顺序。一个队列会按照消息服务器将消息放入队列中的顺序,把它们传送给消费者。当已被消费时,就会从队列头部将它们删除(除非使用了消息优先级)。
- 消费者在成功接收消息之后需向队列应答成功。
PS:如果你希望发送的每个消息都应该被成功处理的话,那么你需要P2P模式。
Publish/Subscribe
在Pub / Sub模型中,一条消息被传递给所有订阅者。这就像广播。在这里,主题被用作负责保存和传递消息的面向消息的中间件。
Publish/Subscribe的特点:
- 每个消息可以有多个消费者;
- 发布者和订阅者之间有时间上的依赖性。针对某个主题的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息,而且为了消费消息,订阅者必须保持运行的状态。
- 为了缓和这样严格的时间相关性,JMS允许订阅者创建一个可持久化的订阅。这样,即使订阅者没有被激活(运行),它也能接收到发布者的消息。
- 每条消息都会传送给称为订阅者的多个消息消费者。订阅者有许多类型,包括持久型、非持久型和动态型。
- 发布者通常不会知道、也意识不到哪一个订阅者正在接收主题消息。
- 消息被推送给消费者,这意味着消息会传送给消费者,而无须请求。
JMS编程模式
如果读完觉得有收获的话,欢迎点赞、关注、加公众号【牛觅技术】,查阅更多精彩历史!!!: