一、初识RabbitMQ
什么是 RabbitMQ?
RabbitMQ 是一个开源的消息代理软件,使用高级消息队列协议(AMQP)来进行消息传递。它允许应用程序、系统或服务之间通过消息队列异步传递消息,从而实现解耦、扩展和可靠的数据传递。
为什么使用 RabbitMQ?
- 解耦:通过消息队列,发送者和接收者不需要直接通信,可以独立地扩展和维护。
- 可靠性:消息队列可以持久化消息,确保消息不会丢失。
- 扩展性:支持水平扩展,能够处理大量并发消息。
- 灵活性:支持多种消息传递模式和复杂的路由机制。
- 异步处理:允许后台处理耗时任务,提高系统响应速度。
核心概念
- 生产者(Producer):发送消息的应用程序。
- 消费者(Consumer):接收并处理消息的应用程序。
- 队列(Queue):存储消息的缓冲区。
- 交换机(Exchange):接收消息并根据绑定规则将其路由到相应的队列。
- 绑定(Binding):定义了交换机和队列之间的路由规则。
- 消息(Message):数据载体,生产者发送消息到队列,消费者从队列接收消息。
RabbitMQ 的6种工作模式
RabbitMQ 提供了多种工作模式,常见的有:
- 简单模式(Simple Queue):最基础的模式,一个生产者,一个消费者,一个队列。
- 工作队列模式(Work Queues):一个生产者,多个消费者,通过队列分发任务,实现负载均衡。
- 发布/订阅模式(Publish/Subscribe):生产者将消息发送到交换机,交换机会将消息广播到多个队列。
- 路由模式(Routing):生产者将消息发送到交换机,交换机根据路由键将消息路由到匹配的队列。
- 主题模式(Topics):生产者将消息发送到交换机,交换机根据路由键的模式(通配符匹配)将消息路由到匹配的队列。
- RPC 模式(Remote Procedure Call):远程过程调用模式,允许客户端通过消息队列请求和接收响应。
以下是一个基本的 docker-compose.yml 文件示例:
version: '3.1'
services:
rabbitmq:
image: rabbitmq:3.12.6-management
container_name: rabbitmq
restart: always
# 节点名 rabbit@rabbitserver,不然会去容器ID
hostname: rabbitserver
environment:
# 默认虚拟机名
RABBITMQ_DEFAULT_VHOST: admin_vhost
# 用户名
RABBITMQ_DEFAULT_USER: admin
# 密码
RABBITMQ_DEFAULT_PASS: 123
# 指定自定义插件目录
RABBITMQ_PLUGINS_DIR: '/plugins:/myplugins'
ports:
- "5672:5672"
- "15672:15672"
volumes:
- /home/apps/rabbitmq/mnt/data:/var/lib/rabbitmq
- /home/apps/rabbitmq/mnt/myplugins:/myplugins