RabbitMQ 消息队列:从入门到实战

1. 什么是 RabbitMQ?

RabbitMQ 是一个开源的消息代理软件,实现了高级消息队列协议(AMQP)。它允许应用程序通过消息进行异步通信,支持多种消息模式,包括点对点、发布/订阅、路由和主题等。

2. 核心概念

  • Producer(生产者):发送消息的应用程序。
  • Consumer(消费者):接收消息的应用程序。
  • Queue(队列):存储消息的缓冲区。
  • Exchange(交换机):接收生产者发送的消息,并根据路由规则将消息分发到队列。
  • Binding(绑定):连接交换机和队列的规则。
  • Routing Key(路由键):生产者发送消息时指定的关键字,用于决定消息路由到哪个队列。

3. 安装与配置

3.1 Docker 安装

bash 复制代码
docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:management

安装完成后,可以通过浏览器访问 http://localhost:15672 进入管理界面,默认用户名和密码均为 guest

4. 基本使用示例

4.1 生产者示例(Python)

python 复制代码
import pika
建立连接
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
声明队列
channel.queue_declare(queue='hello')
发送消息
channel.basic_publish(exchange='',
routing_key='hello',
body='Hello RabbitMQ!')
print(" [x] Sent 'Hello RabbitMQ!'")
关闭连接
connection.close()

4.2 消费者示例(Python)

python 复制代码
import pika
建立连接
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
声明队列
channel.queue_declare(queue='hello')
def callback(ch, method, properties, body):
print(f" [x] Received {body}")
消费消息
channel.basic_consume(queue='hello',
auto_ack=True,
on_message_callback=callback)
print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()

5. 交换机类型

  • Direct Exchange(直连交换机):根据路由键精确匹配队列。
  • Fanout Exchange(扇出交换机):将消息广播到所有绑定的队列。
  • Topic Exchange(主题交换机):根据路由键模式匹配队列。
  • Headers Exchange(头交换机):根据消息头属性匹配队列。

6. 高级特性

6.1 消息确认

消费者处理完消息后需要发送确认,确保消息不会丢失。

6.2 持久化

将队列和消息标记为持久化,即使 RabbitMQ 重启也不会丢失。

6.3 死信队列

处理无法被正常消费的消息,避免消息堆积。

7. 总结

RabbitMQ 是一个功能强大的消息队列中间件,广泛应用于微服务架构、异步任务处理、系统解耦等场景。掌握其核心概念和基本用法,能够帮助开发者构建更健壮、可扩展的分布式系统。

相关推荐
城管不管9 分钟前
重生——第九次面试2026.8.13某车一面
分布式·ai·面试·职场和发展·rabbitmq
apgk115 分钟前
基于Canal实现mysql数据同步到消息队列(RabbitMQ/Kafka)详细操作教程
docker·kafka·rabbitmq
ly76891 小时前
分布式一致性算法详解:从 2PC、3PC 到 Paxos、Raft、ZAB
分布式·算法
珠***格2 小时前
通信链路全打通:西格电力四可装置的 4G/5G + 加密认证技术详解
大数据·数据库·分布式·5g·架构·能源
ACP广源盛139246256734 小时前
WAIC2026 国产算力浪潮@ACP#YLB3118 在算力矩阵中的存储定位与落地场景
大数据·人工智能·分布式·单片机·嵌入式硬件
蜀道山老天师6 小时前
ZABBIX分布式监控Proxy应用实践
分布式·zabbix
liudashuang20176 小时前
Kafka Producer 隐藏深坑:Sender 线程自阻塞(自死锁)导致 BufferExhaustedException 完整复盘
java·分布式·kafka·linq
hard_hot8 小时前
RabbitMQ异步下单架构设计
java·rabbitmq·java-rabbitmq
rustfs8 小时前
GitLab 如何与 RustFS 集成?
分布式·rust·gitlab
Francek Chen8 小时前
【大数据处理与分析】数据仓库Hive:02 数据湖
大数据·数据仓库·hive·hadoop·分布式·数据分析