消息系统:点对点&发布订阅?

这是我参与8月更文挑战的第1天,活动详情查看: 8月更文挑战

消息系统,是系统中负责消息从一个应用传递到另外一个应用,对于应用本身而言,就不需要去关心消息数据的传递过程,只需要关系数据本身即可。

在分布式消息系统中异步的进行消息的传递,存在两种典型模式,那就是点对点消息系统和发布订阅消息系统。

下面我们就来看一下这两种模式各自的特点吧。

点对点消息系统

先不多说,先画图,看的真切。

image.png

如图则是点对点消息系统的一种经典图例,消息传出方将消息数据发送给消息队列,然后由消费者,也就是消息接收方去进行消费;但是这里会存在一个消息只能被消费一次,当一个消息数据被消费后,这个消息数据会在消息队列中消失。

这也是点对点消息系统的特点,因为每个消息数据只能被消费使用一次,所以就避免了重复消费的问题。

发布订阅消息系统

图示如下。

image.png

发布订阅消息系统是大部分分布式企业级系统的优选方案。

发布者将消息数据持久化到数据队列中,准确的说这里不是数据队列了,是Topic,然后由多个订阅者去消费,每个消息数据可以被多个订阅者进行消费。

数据被消费后,不会被topic删除,而且发送到topic中的消息数据可以被所有订阅者消费,这也是发布订阅消息系统和点对点消息系统最本质的区别。

如何选择

这里如果要去对消息队列的模式进行选择,还是要去根据具体场景来进行选择,比如如果你的服务要被多个服务调用,那毋庸置疑的要选择发布订阅消息系统了。