消息系统,是系统中负责消息从一个应用传递到另外一个应用,对于应用本身而言,就不需要去关心消息数据的传递过程,只需要关系数据本身即可。
在分布式消息系统中异步的进行消息的传递,存在两种典型模式,那就是点对点消息系统和发布订阅消息系统。
下面我们就来看一下这两种模式各自的特点吧。
点对点消息系统
先不多说,先画图,看的真切。
如图则是点对点消息系统的一种经典图例,消息传出方将消息数据发送给消息队列,然后由消费者,也就是消息接收方去进行消费;但是这里会存在一个消息只能被消费一次,当一个消息数据被消费后,这个消息数据会在消息队列中消失。
这也是点对点消息系统的特点,因为每个消息数据只能被消费使用一次,所以就避免了重复消费的问题。
发布订阅消息系统
图示如下。
发布订阅消息系统是大部分分布式企业级系统的优选方案。
发布者将消息数据持久化到数据队列中,准确的说这里不是数据队列了,是Topic,然后由多个订阅者去消费,每个消息数据可以被多个订阅者进行消费。
数据被消费后,不会被topic删除,而且发送到topic中的消息数据可以被所有订阅者消费,这也是发布订阅消息系统和点对点消息系统最本质的区别。
如何选择
这里如果要去对消息队列的模式进行选择,还是要去根据具体场景来进行选择,比如如果你的服务要被多个服务调用,那毋庸置疑的要选择发布订阅消息系统了。