什么是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]等等。

待完成


  1. 1.https://www.cloudamqp.com/blog/2014-12-03-what-is-message-queuing.html
  2. 2.扩展阅读:https://www.ibm.com/cloud/learn/message-queues
  3. 3.AMQP: https://dl.acm.org/doi/10.1145/1255421.1255424
  4. 4.物联网通信息协议: http://mqtt.org/
  5. 5.WIKI百科:https://en.wikipedia.org/wiki/Message_queue