目录
1 、什么是MQ
2 、消息队列的流派
2.1、有Broker的MQ
2.1.1 重 topic
2.1.2 轻 topic
2.2 无Broker的MQ
1 、什么是MQ
Message Queue(MQ),消息队列中间件。通常说,MQ通过消息的发送和接收分离来实现应用程序的异步和解耦,但这只是效果而不是目的,MQ真正的目的是为了通讯,屏蔽底层一整套复杂的通讯协议,定义了一套应用层的,更加简单的通讯协议。MQ带来的不是具体的通讯协议,而是更高层次的通讯模型。它定义了两个对象,发送数据的生产者和接收数据的叫消费者
2 、消息队列的流派 2.1、有Broker的MQ
这个流派通常有一台服务器作为Broker,所有的消息都通过它中转。生产者把消息发送给她就结束自己的任务了,Broker则把消息主动推送给消费者(或者消费者主动轮训)
2.1.1 重 topic
kafka,JMS(ActiveMQ)就属于这个流派,生产者会发送key和数据到Broker,由broker比较key之后决定给哪个消费者。这种模式是我们最常见的模式,是我们对MQ最多的印象、在这种模式下topic往往是一个比较大的概念,甚至一个系统中可能只有一个topic。topic某种意义上就是queue。
如上图所示,broker定义了三个队列key1,key2,key3,生产者发送数据的时候会发送key1和data,Broker在推送数据的时候则推送data(也可能把key带上)
虽然架构是一样的,但是kafka的性能比JMS不知道高多少倍,所以基本这种类型的MQ只有kafka一种备选方案
2.1.2 轻 topic
这种代表是RabbitMQ,生产者发送key和数据,消费者定义订阅的队列,Broker收到数据后会通过一定的逻辑计算出key对应的队列,然后把数据交给队列。
2.2 无Broker的MQ
在生产者和消费者之间没有broker,l例如ZeroMQ,直接通过Socket通信