RabbitMQ的介绍

RabbitMQ的介绍

RabbitMQ的安装

  • 使用Docker进行安装

    • docker pull rabbitmq:3-management
      
      • rabbitmq:3-management 镜像预装了 RabbitMQ 的管理插件(rabbitmq_management)。
      • 管理插件提供了一个基于 Web 的管理界面,用户可以通过浏览器访问该界面,监控和管理 RabbitMQ。
      • 如果使用 rabbitmq:3 镜像(不带 management 标签),则不会预装 RabbitMQ 管理插件。
      • 将无法通过 Web 界面管理 RabbitMQ,只能通过命令行或客户端工具进行操作。
    • 手动安装管理插件

      • 如果使用 rabbitmq:3 镜像,但仍然需要管理插件,可以手动安装:

      • 进入容器:

        • docker exec -it <容器ID> bash
          
      • 启用管理插件:

        • rabbitmq-plugins enable rabbitmq_management
          
      • 重启容器:

        • docker restart <容器ID>
          
  • 启动RabbitMQ

    • docker run -d --hostname my-rabbit --name rabbitMQ -p 5672:5672 -p 15672:15672 rabbitmq:3-management
      
      • -d
        • 含义:以“分离模式”(detached mode)运行容器。
        • 作用:容器会在后台运行,不会占用当前终端。
      • --hostname my-rabbit
        • 含义:设置容器的主机名(hostname)。
        • 作用:RabbitMQ 使用主机名来标识节点。这里将容器的主机名设置为 my-rabbit
        • 用于设置容器内部的主机名,影响容器内部的操作系统和应用程序。
      • --name some-rabbit
        • 含义:为容器指定一个名称。
        • 作用:方便后续通过名称管理容器(如启动、停止、删除等)。
      • -p 5672:5672
        • 含义:将宿主机的端口映射到容器的端口。
        • 作用
          • 5672 是 RabbitMQ 的默认 AMQP(Advanced Message Queuing Protocol)端口,用于客户端与 RabbitMQ 通信。
          • 这里将宿主机的 5672 端口映射到容器的 5672 端口。
      • -p 15672:15672
        • 含义:将宿主机的端口映射到容器的端口。
        • 作用
          • 15672 是 RabbitMQ 管理插件的默认端口,用于访问 RabbitMQ 的 Web 管理界面。
          • 这里将宿主机的 15672 端口映射到容器的 15672 端口。
      • rabbitmq:3-management
        • 含义:指定要运行的 Docker 镜像。
        • 作用
          • rabbitmq 是 RabbitMQ 的官方 Docker 镜像。
          • 3-management 是镜像的标签(tag),表示包含 RabbitMQ 管理插件的版本。
  • 访问管理界面

    • 打开浏览器,访问 http://localhost:15672
    • 使用默认用户名和密码 guest/guest 登录。

RabbitMQ虚拟主机

虚拟主机的定义和作用

  • 定义
    • 虚拟主机是 RabbitMQ 中的逻辑隔离单元。
    • 它允许在同一个 RabbitMQ 服务器上创建多个独立的环境,每个环境拥有自己的资源(如交换器、队列、绑定等)。
    • 虚拟主机之间完全隔离,资源不能共享。
  • 作用
    • 资源隔离
      • 不同虚拟主机之间的资源(如交换器、队列)完全隔离。
      • 例如,虚拟主机 vhost1 中的队列 my_queue 和虚拟主机 vhost2 中的队列 my_queue 是两个不同的队列。
    • 权限控制
      • 可以为每个虚拟主机设置独立的用户权限。
      • 例如,用户 user1 只能访问虚拟主机 vhost1,而不能访问虚拟主机 vhost2
    • 多租户支持
      • 虚拟主机可以用于支持多租户架构,每个租户使用独立的虚拟主机。
    • 环境隔离
      • 在开发、测试和生产环境中,可以使用不同的虚拟主机来隔离资源,避免相互影响。

虚拟主机的管理

  • RabbitMQ 默认有一个虚拟主机,名称为 /

  • 如果没有显式创建虚拟主机,所有资源都会存储在默认虚拟主机中。

  • 创建虚拟主机

    • 可以使用 RabbitMQ 的命令行工具 rabbitmqctl 创建虚拟主机:

    • rabbitmqctl add_vhost <vhost_name>
      
  • 删除虚拟主机

    • 可以使用以下命令删除虚拟主机:

    • rabbitmqctl delete_vhost <vhost_name>
      
  • 列出虚拟主机

    • rabbitmqctl list_vhosts
      

RabbitMQ消息发送流程

核心组件

在 RabbitMQ 中,消息发送流程涉及以下核心组件:

  • 生产者(Producer)
    • 发送消息的应用程序。
    • 将消息发布到交换器(Exchange)。
  • 交换器(Exchange)
    • 接收生产者发送的消息。
    • 根据路由规则将消息分发到队列。
  • 队列(Queue)
    • 存储消息的缓冲区。
    • 消费者从队列中获取消息。
  • 消费者(Consumer)
    • 接收并处理消息的应用程序。
    • 从队列中订阅消息。
  • 绑定(Binding)
    • 连接交换器和队列的规则。
    • 定义了交换器如何将消息路由到队列。

消息发送流程

  • 生产者发送消息

    • 生产者创建一条消息,包含消息体和可选的属性(如路由键、优先级等)。

    • 生产者将消息发送到指定的交换器(Exchange)。

    • 发送时需要指定交换器名称和路由键(Routing Key)。

  • 交换器接收消息

    • 交换器接收生产者发送的消息。

    • 根据交换器类型和绑定规则,决定将消息路由到哪些队列。

      • 交换器类型
        • Direct Exchange:根据路由键精确匹配。
        • Topic Exchange:根据路由键的模式匹配。
        • Fanout Exchange:广播到所有绑定的队列。
        • Headers Exchange:根据消息头属性匹配。
  • 消息路由到队列

    • 交换器根据绑定规则将消息路由到一个或多个队列。
    • 如果消息没有匹配任何绑定规则,可能会被丢弃或返回给生产者(取决于配置)。
  • 队列存储消息

    • 队列接收交换器路由过来的消息。
    • 消息在队列中等待消费者处理。
      • 如果队列已满(达到最大长度),可能会拒绝新消息(取决于配置)。
  • 消费者订阅消息

    • 消费者订阅一个或多个队列。
    • 消费者从队列中获取消息。
      • 可以通过 拉取模式(主动从队列获取)或 推送模式(RabbitMQ 主动推送)获取消息。
  • 消费者处理消息

    • 消费者接收到消息后进行处理。
    • 处理完成后,消费者向 RabbitMQ 发送确认(ACK)。
      • 如果消费者处理失败,可以拒绝消息(NACK)或将消息重新放回队列。
  • 消息确认

    • RabbitMQ 收到消费者的确认后,将消息从队列中删除。
    • 如果启用了持久化,消息会从磁盘中删除。
posted @ 2025-03-26 18:20  QAQ001  阅读(55)  评论(0)    收藏  举报