RabbitMQ 消息队列

RabbitMQ 消息队列

RabbitMQ 是一个开源的消息代理和队列服务器,它支持多种消息协议,包括 AMQP(高级消息队列协议),MQTT,STOMP 等。RabbitMQ 被广泛用于异步消息处理、事件驱动架构、微服务架构等场景。以下是 RabbitMQ 的一些关键特性和概念:

  1. 消息(Message):消息是传递的数据,由消息头和消息体组成。消息体是不透明的,而消息头则包含元数据,如路由信息。
  2. 队列(Queue):队列是消息的容器,它们存储消息直到它们被消费。队列是消息传递的核心,它们是持久的,即使 RabbitMQ 服务重启,队列中的消息也不会丢失。
  3. 交换器(Exchange):交换器接收消息,并根据路由规则将消息路由到一个或多个队列。RabbitMQ 支持多种类型的交换器,如 direct(直接)、fanout(广播)、topic(主题)和 headers(头)。
  4. 绑定(Binding):绑定是交换器和队列之间的关联规则,它告诉交换器如何将消息路由到队列。绑定可以基于路由键(routing key)或消息头。
  5. 连接(Connection):连接是客户端与 RabbitMQ 服务器之间的 TCP 连接。
  6. 通道(Channel):每个连接可以包含多个通道,通道是 AMQP 协议中的一个概念,用于在客户端和 RabbitMQ 之间传输消息。每个通道都是一个轻量级的连接,可以进行消息的发送和接收。
  7. 生产者(Producer):生产者是发送消息到 RabbitMQ 的客户端应用程序。
  8. 消费者(Consumer):消费者是从 RabbitMQ 接收消息的客户端应用程序。
  9. 确认(Acknowledgement):消费者处理完消息后,会发送一个确认信号给 RabbitMQ,告知消息已被成功处理,这样消息才会从队列中被移除。
  10. 持久性(Durability):RabbitMQ 允许消息和队列被设置为持久的,这意味着即使 RabbitMQ 服务重启,这些消息和队列也不会丢失。
  11. 死信队列(Dead Letter Exchange):当消息无法被消费或者被拒绝时,它们可以被发送到一个特殊的队列------死信队列。
  12. 集群(Clustering):多个 RabbitMQ 服务器可以组成一个集群,以提供高可用性和负载均衡。
  13. 插件系统(Plugin System):RabbitMQ 支持插件,这些插件可以扩展 RabbitMQ 的功能,如支持新的交换器类型、消息持久化策略等。

RabbitMQ 提供了灵活的路由功能、高可用性、持久化、集群和多种语言的客户端库,使其成为构建复杂消息传递系统的理想选择。


七种队列模式

1. 简单模式(Hello World)

做最简单的事情,一个生产者对应一个消费者,RabbitMQ相当于一个消息代理,负责将A的消息转发给B。
单生产者,单消费者,单队列。

应用场景:

将发送的电子邮件放到消息队列,然后邮件服务在队列中获取邮件并发送给收件人。

2. 工作队列模式(Work queues)

在多个消费者之间分配任务(竞争的消费者模式),一个生产者对应多个消费者。
适用于资源密集型任务, 单个消费者处理不过来,需要多个消费者进行处理的场景。
单生产者,多消费者,单队列。

应用场景:

一个订单的处理需要10s,有多个订单可以同时放到消息队列,

然后让多个消费者同时并行处理,而不是单个消费者的串行消费。

3. 发布订阅模式(Publish/Subscribe)

一次向许多消费者发送消息,将消息将广播到所有的消费者。
单生产者,多消费者,多队列。

应用场景:

更新商品库存后需要通知多个缓存和多个数据库。

结构如下:

  • 一个fanout类型交换机扇出两个消息队列,分别为缓存消息队列、数据库消息队列
  • 一个缓存消息队列对应着多个缓存消费者
  • 一个数据库消息队列对应着多个数据库消费者

4. 路由模式(Routing)

根据Routing Key有选择地接收消息。
多消费者,选择性多队列,每个队列通过routing key全文匹配。

发送消息到交换机并且要指定路由键(Routing key) 。

消费者将队列绑定到交换机时需要指定路由key,仅消费指定路由key的消息。

应用场景:

在商品库存中增加了1台iphone12,iphone12促销活动消费者指定routing key为iphone12 promote,

只有此促销活动会接收到消息,其它促销活动不关心也不会消费此routing key的消息。

5. 主题模式(Topics)

主题交换机方式接收消息,将routing key和模式进行匹配。
多消费者,选择性多队列,每个队列通过模式匹配。

队列需要绑定在一个模式上。

#匹配一个词或多个词,*只匹配一个词。

应用场景:

iphone促销活动可以接收主题为多种iPhone的消息,如iphone12、iphone13等。

6. 远程过程调用(RPC)

在远程计算机上运行功能并等待结果。

应用场景:

需要等待接口返回数据,如订单支付。

7. 发布者确认(Publisher Confirms)

与发布者进行可靠的发布确认,发布者确认是RabbitMQ扩展,可以实现可靠的发布。

在通道上启用发布者确认后,RabbitMQ将异步确认发送者发布的消息,这意味着它们已在服务器端处理。

应用场景:

blisher Confirms)

与发布者进行可靠的发布确认,发布者确认是RabbitMQ扩展,可以实现可靠的发布。

在通道上启用发布者确认后,RabbitMQ将异步确认发送者发布的消息,这意味着它们已在服务器端处理。

应用场景:

对于消息可靠性要求较高,比如钱包扣款。

相关推荐
茶杯梦轩5 天前
从零起步学习RabbitMQ || 第三章:RabbitMQ的生产者、Broker、消费者如何保证消息不丢失(可靠性)详解
分布式·后端·面试
回家路上绕了弯6 天前
深入解析Agent Subagent架构:原理、协同逻辑与实战落地指南
分布式·后端
用户8307196840826 天前
Spring Boot 集成 RabbitMQ :8 个最佳实践,杜绝消息丢失与队列阻塞
spring boot·后端·rabbitmq
用户8307196840828 天前
RabbitMQ vs RocketMQ 事务大对决:一个在“裸奔”,一个在“开挂”?
后端·rabbitmq·rocketmq
初次攀爬者9 天前
RabbitMQ的消息模式和高级特性
后端·消息队列·rabbitmq
初次攀爬者11 天前
ZooKeeper 实现分布式锁的两种方式
分布式·后端·zookeeper
让我上个超影吧12 天前
消息队列——RabbitMQ(高级)
java·rabbitmq
塔中妖13 天前
Windows 安装 RabbitMQ 详细教程(含 Erlang 环境配置)
windows·rabbitmq·erlang
断手当码农13 天前
Redis 实现分布式锁的三种方式
数据库·redis·分布式
初次攀爬者13 天前
Redis分布式锁实现的三种方式-基于setnx,lua脚本和Redisson
redis·分布式·后端