一、初识RabbitMQ

什么是 RabbitMQ?

RabbitMQ 是一个开源的消息代理软件,使用高级消息队列协议(AMQP)来进行消息传递。它允许应用程序、系统或服务之间通过消息队列异步传递消息,从而实现解耦、扩展和可靠的数据传递。

 

为什么使用 RabbitMQ?

  1. 解耦:通过消息队列,发送者和接收者不需要直接通信,可以独立地扩展和维护。
  2. 可靠性:消息队列可以持久化消息,确保消息不会丢失。
  3. 扩展性:支持水平扩展,能够处理大量并发消息。
  4. 灵活性:支持多种消息传递模式和复杂的路由机制。
  5. 异步处理:允许后台处理耗时任务,提高系统响应速度。

 

核心概念

  1. 生产者(Producer):发送消息的应用程序。
  2. 消费者(Consumer):接收并处理消息的应用程序。
  3. 队列(Queue):存储消息的缓冲区。
  4. 交换机(Exchange):接收消息并根据绑定规则将其路由到相应的队列。
  5. 绑定(Binding):定义了交换机和队列之间的路由规则。
  6. 消息(Message):数据载体,生产者发送消息到队列,消费者从队列接收消息。

 

RabbitMQ 的6种工作模式

RabbitMQ 提供了多种工作模式,常见的有:

  1. 简单模式(Simple Queue):最基础的模式,一个生产者,一个消费者,一个队列。
  2. 工作队列模式(Work Queues):一个生产者,多个消费者,通过队列分发任务,实现负载均衡。
  3. 发布/订阅模式(Publish/Subscribe):生产者将消息发送到交换机,交换机会将消息广播到多个队列。
  4. 路由模式(Routing):生产者将消息发送到交换机,交换机根据路由键将消息路由到匹配的队列。
  5. 主题模式(Topics):生产者将消息发送到交换机,交换机根据路由键的模式(通配符匹配)将消息路由到匹配的队列。
  6. 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