什么是MQ
这篇文章是一篇未完成稿,有时间再写
什么是消息队列(Message Queue)?
消息队列使得应用之间可以通过互发消息的方式来通信,这和传统的RPC方式有很大的区别。通过消息队列提供的服务,解除了点对点,星形拓扑通信耦合的问题。同时,当目标服务不可用的时候,消息队列充当了临时的消息缓存。
下面先解释一下什么是消息队列[1],怎么使用,在架构层面又会带来什么样的好处[2]。
队列就是将事物排成一列,依次处理,并且依照先进先出(First In, First Out)的顺序。那么消息队列(MQ),就是用于不同系统或者应用之间通信的的列表, 将需要通信的消息保存在队列中,等待应用依次处理。queues.io是一个比较好的网站可以查找各种不同功能的队列。
消息就是在发送者和接受者之间传递的数据。这里的数据可以是任何东西,数据、指令、文件等等,比如一个消息可能是系统A告诉系统B可以开始处理某个任务。
订阅/发布模式
这种模式也叫生产者和消费者模式。生产者连接到MQ,生成消息然后放入MQ;消费者连接到MQ,获取消息然后进行处理。
架构上的解耦和扩展性
在现代云架构中,应用程序被分解为多个规模较小且更易于开发、部署和维护的独立构建块。消息队列可为这些分布式应用程序提供通信和协调。消息队列可以显著简化分离应用程序的编码,同时提高性能、可靠性和可扩展性。
借助消息队列,系统的不同部分可相互通信并异步执行处理操作。消息队列提供一个临时存储消息的轻量级缓冲区,以及允许软件组件连接到队列以发送和接收消息的终端节点。这些消息通常较小,可以是请求、恢复、错误消息或明文信息等。要发送消息时,一个名为“创建器”的组件会将消息添加到队列。消息将存储在队列中,直至名为“处理器”的另一组件检索该消息并执行相关操作。
MQ 提供了一个异步通信的机制,当另外一个系统没有响应的时候,发送者并不会因此而阻塞。
解耦和扩展性
消息协议
现代的MQ支持很多不同的协议[5]。有了这些协议之后,很多不同类型的MQ都可以在一起协同使用。
常见的有AMQP[3], MQTT[4]等等。