谈谈消息队列的流派
关于 MQ 的定义 Message Queue ( MQ )消息队列中间件,通常我们在网上看到的对其定义是将消息的发送和接受分离来实现应用程序的异步和解耦,给人的直觉是 MQ 是异步的,用来解耦的。但这个只是 MQ 的效果,而不是目的。 MQ 真正的目的是为了通讯,屏蔽底层复杂的通讯协议,定义了一套应用层上更加简单的通讯协议。 一套分布式系统中两个模块之间通讯要么是 HTTP ,要么是 TCP ,但这两种协议其实都是原始的协议。前者实现通讯就必须要做到各客户端都有 WebServer ,而且不支持长连接;后者就更加原始了 — 粘包、心跳、私有的协议。 而 MQ 所要做就是在基于这些现有的协议之上构建一个更简单的通讯(生产者/消费者)模型。它定义了两个对象 —发送数据的叫生产者,接受数据的叫消费者,提供一个 SDK 给我们自己定义生产者和消费者实现消息通讯,且无视底层通讯协议。 带 Broker 的流派 这个流派通常有一台服务器作为 Broker ,所有的消息都通过它进行中转。生产者把消息发送给它就结束自己的任务了,最后 Broker 则把消息主动推送给消费者(或者消费者主动轮询)。 重 Topic 的 MQ Kafka 、 Active MQ 就属于这个流派:生产者发送 key 和数据到 Broker ,由 Broker 比较 key 之后决定给哪个消费者。 在这种模式下,