articleList

04-RabbitMQ 核心概念+安装+web 管控台

2025/03/16 posted in  RabbitMQ
Tags: 

什么是 RabbitMQ

  • http://www.rabbitmq.com/
  • 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、C,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不错,与 SpringAMQP 完美的整合、API 丰富易用
  • 文档:https://www.rabbitmq.com/getstarted.html

RabbitMQ 核心概念

  • Broker

    • RabbitMQ 的服务端程序,可以认为一个 mq 节点就是一个 broker
  • Producer 生产者

    • 创建消息 Message,然后发布到 RabbitMQ 中
  • Consumer 消费者

    • 消费队列里面的消息
  • Message 消息

    • 生产消费的内容,有消息头和消息体,也包括多个属性配置,比如 routingKey 路由键
  • Queue 队列

    • 是 RabbitMQ 的内部对象,用于存储消息,消息都只能存储在队列中
  • Channel 信道

    • 一条支持多路复用的通道,独立的双向数据流通道,可以发布、订阅、接收消息
    • 信道是建立在真实的 TCP 连接内的虚拟连接,复用 TCP 连接的通道
  • Connection 连接

    • 是 RabbitMQ 的 socket 链接,它封装了 socket 协议相关部分逻辑,一个连接上可以有多个 channel 进行通信
  • Exchange 交换器

    • 生产者将消息发送到 Exchange,交换器将消息路由到一个或者多个队列中,里面有多个类型,后续再一一介绍,队列和交换机是多对多的关系
  • RoutingKey 路由键

    • 生产者将消息发给交换器的时候,一般会指定一个 RoutingKey,用来指定这个消息的路由规则
    • 最大长度 255 字节
  • Binding 绑定

    • 通过绑定将交换器与队列关联起来,在绑定的时候一般会指定一个绑定键 (BindingKey),这样 RabbitMQ 就知道如何正确地将消息路由到队列了
    • 生产者将消息发送给交换器时,需要一个 RoutingKey,当 BindingKey 和 RoutingKey 相匹配时,消息会被路由到对应的队列中
  • Virtual host 虚拟主机

    • 用于不同业务模块的逻辑隔离,一个 Virtual Host 里面可以有若干个 Exchange 和 Queue,同一个 VirtualHost 里面不能有相同名称的 Exchange 或 Queue

    • 默认是 /

      • /dev
      • /test
      • /pro

RabbitMQ 安装方式

  • 安装文档

  • 源码安装

    • 依赖多、且版本和维护相对复杂
    • 需要 erlang 环境、版本也是有要求
  • docker 镜像安装【推荐】

    • 不用安装其他相关依赖,容器化部署是趋势

    • 方便管理维护,企业多采用这个方式

    • 安装命令:

      #拉取镜像
      docker pull rabbitmq:management
      ​
      docker run -d --hostname rabbit_host1 --name xd_rabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=password -p 15672:15672 -p 5672:5672 rabbitmq:management
      ​
      #介绍
      -d 以守护进程方式在后台运行
      -p 15672:15672 management 界面管理访问端口
      -p 5672:5672 amqp 访问端口
      --name:指定容器名
      --hostname:设定容器的主机名,它会被写到容器内的 /etc/hostname 和 /etc/hosts,作为容器主机IP的别名,并且将显示在容器的bash中
      ​
      -e 参数
        RABBITMQ_DEFAULT_USER 用户名
        RABBITMQ_DEFAULT_PASS 密码
      
  • 主要端口介绍

    • 4369 erlang 发现口
    • 5672 client 端通信口
    • 15672 管理界面 ui 端口
    • 25672 server 间内部通信口
  • web 页面地址(示例)

  • 注意事项

    • Linux 服务器检查防火墙是否关闭
    • 云服务器检查网络安全组是否开放端口
    CentOS 7 以上默认使用的是firewall作为防火墙
    查看防火墙状态
    firewall-cmd --state
    ​
    停止firewall
    systemctl stop firewalld.service
    ​
    禁止firewall开机启动
    systemctl disable firewalld.service
    

RabbitMQ 的 Web 管控台介绍

  • 管控台介绍

    • 默认的 rabbitmq 账号密码:guest/guest
    • 安装时设置的账号密码:admin/password

  • 每个虚拟主机默认就有 7 个交换机