[消息队列入门 | 青训营笔记]

84 阅读3分钟

这是我参与「第五届青训营」伴学笔记创作活动的第 13 天。

今天,我主要学习了消息队列的相关知识,简要学习了它在Web开发中的应用。

一、消息队列的引入

消息队列(Message Queue)是一种消息传递机制,它允许不同的组件或系统异步地交换消息。消息队列可以缓存消息并在后续处理这些消息时使用它们。这有助于减少系统间的耦合,并允许在消息生产者和消息消费者之间实现异步通信。

打个比方,小红给小明送书,原本需要两个人同时在场,但是我们可以引入一个“书柜”,小红只需要把书放到书柜里,等小明来拿就行(就像菜鸟驿站存快递一样)。

在软件开发中引入消息队列有以下几个优点:

  1. 解耦:消息队列可以帮助解耦系统之间的关系,使生产者和消费者不必直接相互通信,从而减少系统间的耦合。(例如上面的书柜就实现了解耦)
  2. 异步通信:消息队列可以支持异步通信,使生产者和消费者可以并行工作,而不是在等待对方的响应。(小明小红只需要完成对应的内容即可,不需要等待对方)
  3. 可靠性:消息队列可以保证消息的可靠性,从而确保消息不会丢失。(用书柜存个东西,可靠性要比临时通道要高)
  4. 扩展性:消息队列可以支持分布式系统,从而实现系统的水平扩展。(放置多个书柜)
  5. 流量控制:消息队列可以帮助控制系统的流量,从而避免系统的过载。(例如书柜有限定大小)

因此,消息队列可以帮助解决软件开发中的许多问题,提高系统的效率和可靠性。

二、消息队列的工作原理

总的来说,消息队列的工作原理如下:

  1. 生产者:生产者向消息队列发送消息,这些消息将存储在消息队列中,等待消费者消费。
  2. 消息队列:消息队列负责缓存生产者发送的消息,并根据预定的策略确定消息的优先级。
  3. 消费者:消费者从消息队列中获取消息,并对消息进行处理。
  4. ACK:消费者处理完消息后,可以向消息队列发送ACK,
  5. 告诉消息队列消息已经成功处理。如果消费者没有发送ACK,消息队列可以将消息重新发送给其他消费者或者再次发送给同一消费者,以确保消息被正确处理。

总的来说,消息队列的工作原理是提供了一个缓存区,用于在生产者和消费者之间进行异步通信,并确保消息的可靠传输。

三、常见的消息队列

常见的消息队列有以下几种:

  1. RabbitMQ:开源的消息队列,支持多种消息协议,可以部署在各种操作系统上
  2. Apache Kafka:一个分布式的消息队列,可以处理高吞吐量的数据流
  3. Apache ActiveMQ:一个开源的消息队列,支持多种协议,并且有很好的可伸缩性
  4. Apache RocketMQ:阿里巴巴开源的消息队列,具有高吞吐量、高可靠性和高可用性等特点
  5. ZeroMQ:一个简单的消息队列,提供了许多高级功能,如可靠消息传递、负载均衡等
  6. Amazon SQS:亚马逊提供的云服务,提供了消息队列的功能