这是我参与「第五届青训营 」笔记创作活动的第6天
消息队列
什么是消息队列?
- 消息队列使应用程序可以通过队列相互发送消息来进行异步通信。消息队列在发送方和接收方之间提供临时存储,以便在目标程序繁忙或未连接时发送方可以不间断地继续运行。异步处理允许任务调用服务,并且继续下一个任务而服务以自己的节奏处理请求。
- 队列是一排等待处理的事物——从行首开始按顺序排列 。 消息队列是应用程序之间发送的消息队列。它包括一系列等待处理的工作对象。
- 消息是在发送方和接收方应用程序之间传输的数据;它本质上是一个字节数组,顶部有一些标题。消息的示例可以是事件。一个应用程序通过队列告诉另一个应用程序开始处理特定任务。
- 消息队列的基本架构很简单:有称为生产者的客户端应用程序创建消息并将它们传递到消息队列。另一个称为消费者的应用程序连接到队列并获取要处理的消息。放入队列的消息会一直存储,直到消费者检索它们。
- 队列可以防止服务中断和故障。
- 队列示例:Kafka、Heron、实时流、Amazon SQS 和 RabbitMQ。
消息队列在微服务架构中的作用
- 在微服务架构中,不同的服务划分了不同的功能,提供了不同的功能。这些服务耦合在一起形成一个完整的软件应用程序。
- 通常,在微服务架构中,存在交叉依赖关系,这意味着没有其他服务的帮助,任何单个服务都无法执行其功能。这对于我们的系统来说至关重要,因为它有一种机制可以让服务彼此保持联系而不会被响应阻塞。
- 消息队列通过为服务提供一种将消息异步推送到队列并确保将消息传送到正确目的地的方法来实现此目的。要在服务之间实现消息队列,我们需要一个消息代理,将其视为邮递员,他从发件人那里接收邮件并将其递送到正确的目的地。
消息代理——RabbitMQ
- RabbitMQ 是使用最广泛的消息代理之一,它充当微服务架构所需的消息代理、“邮递员”。
- RabbitMQ 包括:
- 生产者——创建消息的客户端
- 消费者——接收消息
- 队列——存储消息
- 交换——能够路由消息并将它们发送到队列
- 系统按以下方式运行:
- 生产者创建消息并将其发送到交换器
- 交换器接收消息并将其路由到订阅它的队列
- 消费者从订阅的那些队列接收消息