JMS消息传递模型:点对点和发布/订阅
在本文中,我们将讨论Java消息系统(JMS)支持的消息模型。
在阅读本文之前,请阅读我先前有关JMS的文章,以了解一些JMS Basic概念。
JMS消息传递模型
JMS API支持两种消息传递模型(编程模型),以支持异构系统之间的异步消息传递。
- 点对点模型(P2P模型)
- 发布-订阅模型(Pub/Sub模型)
JMS消息传递模型
点对点消息传递模型
点对点消息传递模型也称为P2P模型。
下图显示了任何消息系统中的典型点对点消息模型。
JMS P2P消息传递模型
P2P模型如何运作?
点对点模型遵循以下概念:
P2P模型使用"队列"作为JMS目标
在P2P模型中,JMS发送者或者JMS生产者创建消息并将消息发送到队列。
JMS队列是一个管理对象,由管理员在JMS提供程序中创建。
在P2P模型中,JMS接收器或者JMS使用者从队列接收和读取消息。
在P2P模型中,一条JMS消息仅传递给一个JMS使用者。
我们可以将任意数量的JMS发送器和JMS接收器配置到特定队列。
但是,任何消息都应传递给一个接收方,也只能传递给一个接收方。JMS Sender和JMS接收器之间没有时间依赖性。
这意味着,当JMS发送方发送该消息时,无论该消息是否存在,JMS接收器都可以使用该消息。在此模型中,目标存储消息,直到接收方将其消耗为止。
可能的P2P模型消息系统
在本节中,我们将讨论"实现P2P消息传递模型的可能方法是什么"。
方法1:在此P2P方法中,我们配置了一个发送方和一个接收方。
这是一种非常简单明了的方法,因为只有一对一的连接。
一个发送者将消息发送到队列,接收者接收这些消息。
JMS P2P模型–方法1
方法2:在此P2P模型中,我们配置了一个发送方和多个接收方。
但是,通信只会在一个发送者与一个接收者之间发生。
如果发送方向接收方1发送一条消息,则只有该接收方(即接收方1)接收到该消息,然后将ACK(确认)发送回发送方。
JMS P2P模型–方法2
方法3:在此P2P模型中,我们配置了多个发送方,而仅配置了一个接收方。
但是,通信只会发生一个发送者到一个接收者。
JMSP2P模型–方法3
方法4:在此P2P模型中,我们配置了多个发送者和多个接收者。
但是,通信只会在一个发送者与一个接收者之间发生。
如果发送方2向接收方2发送一条消息,则只有该接收方(即接收方2)接收到该消息并将ACK(确认)发送回发送方2。
JMS P2P模型–方法4
- P2P模型可能有一个以上的发送方和一个以上的接收方,但是每条消息仅由一个接收方使用。
P2P模型多接收器
即使此队列有多个接收方,但每个消息仅由一个接收方使用。
例如," Msg1"仅由" JMS Receiver 3"使用。
- 有时,同一JMS客户端可以充当JMS发送方或者JMS接收方。
发布/订阅消息传递模型
发布/订阅消息传递模型再次分为两类。
持久消息模型:持久模型也称为持久消息模型。
在此模型中,消息将存储在JMS Server中的某种存储中,直到将它们正确地传递到目标为止。非持久消息模型:非持久模型也称为非持久消息模型。
在此模型中,消息未存储在JMS服务器中。
JMS Pub子消息传递模型
下图显示了典型的发布/订阅消息传递系统。
JMS Pub子示例
发布/订阅模型如何工作
发布/订阅模型使用Topic作为JMS目标。
JMS管理员使用JMS Provider管理控制台并在JMS Provider中配置所有必需的ConnectionFactory和Topics对象。
JMS Publisher创建消息并将消息发布到主题。
JMS订阅服务器订阅感兴趣的主题并使用所有消息。
发布/订阅消息传递模型具有时间依赖性。
这意味着JMS订阅服务器只能在订阅该主题之后才能使用发布到该主题的消息。
订阅之前发布的任何消息或者非活动时发布的任何消息都无法传递给该使用者。与P2P模型不同,在此模型中,目标不存储消息。
就像P2P模型一样,Pub/Sub模型也包含许多可能的体系结构:
- 一个发布者和多个订阅者
- 许多发布者和一个订阅者
- 许多出版商和许多订户
P2P和发布/订阅消息传递模型之间的差异
下表说明了两种JMS消息传递模型之间的主要区别。
S.No. | Point-To-Point Messaging Model | Publish/Subscribe Messaging Model |
---|---|---|
1. | Each message is delivered to one and only one JMS Receiver | Each message is delivered to multiple Consumers. |
2. | P2P Model has no timing dependency. | Pub/Sub model has some timing dependency. |
3. | JMS Receiver sends acknowledgements to JMS Sender once it receives messages. | Acknowledgement is not required. |