1. 什么是 RabbitMQ?
RabbitMQ 是一个开源的消息代理软件,实现了高级消息队列协议(AMQP)。它允许应用程序通过消息进行异步通信,支持多种消息模式,包括点对点、发布/订阅、路由和主题等。
2. 核心概念
- Producer(生产者):发送消息的应用程序。
- Consumer(消费者):接收消息的应用程序。
- Queue(队列):存储消息的缓冲区。
- Exchange(交换机):接收生产者发送的消息,并根据路由规则将消息分发到队列。
- Binding(绑定):连接交换机和队列的规则。
- Routing Key(路由键):生产者发送消息时指定的关键字,用于决定消息路由到哪个队列。
3. 安装与配置
3.1 Docker 安装
docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:management安装完成后,可以通过浏览器访问 http://localhost:15672 进入管理界面,默认用户名和密码均为guest。
4. 基本使用示例
4.1 生产者示例(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)
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 是一个功能强大的消息队列中间件,广泛应用于微服务架构、异步任务处理、系统解耦等场景。掌握其核心概念和基本用法,能够帮助开发者构建更健壮、可扩展的分布式系统。