消息模型是JMS(Java Message Service)重要的概念,主要有:
- 点对点(Point To Point)
- 发布/订阅(Publish / Subscribe)
点对点
- 点对点模型中,每一条消息都有一个发送者和一个接收者,消息代理得到消息时,将消息放入一个队列中。
- 当接受者请求队列中的下一条消息时,消息会从队列中取出,并投递给接收者。
- 提示:接收者可以是多个来处理队列中的消息。
Example:银行业务
我们在银行排队,并不知道哪一个柜台专员会办理我们的业务。柜台专员办理完某个客户的业务后,她就空闲了,此时她会要求排队等候中的下一个客户来办理业务。然后其他柜台帮助其他客户办理业务 。
同样的,在点对点消息模型中,如果有多个接收者监听队列,我们也无法知道某条特定的消息会由哪一个接收者处理。这种不确定性实际上有很多好处,因为我们只需要简单地为队列添加新的监听器就能提高应用的消息处理能力。
点对点消息模型图:
发布/订阅
- 在发布—订阅消息模型中,消息会发送给一个主题。与队列类似,多个接收者都可以监听一个主题。但是,与队列不同的是,消息不是再只投递给一个接收者,而是主题的所有订阅者都会接收到此消息的副本 。
- 发布者并不知道谁订阅了它的消息。发布者只知道它的消息要发送到一个特定的主题,而不知道有谁监听这个主题。
- 也就是说,发布者不知道消息是如何被处理的。
Example:报刊杂志订阅
比如北京日报、潇湘晨报等。那么这些个我们订阅的报纸就相当于发布订阅模式里的topic。有很多个人订阅报纸,也有人可能和我订阅了相同的报纸。那么在这里相当于我们在同一个topic里注册了。对于一份报纸发行方来说,它和所有的订阅者就构成了一个1对多的关系。
这种关系如下图所示:
作者: Zealon
崇尚简单,一切简单自然的事物都是美好的。