RabbitMQ概述与安装

81 阅读4分钟

RabbitMQ 介绍

RabbitMQ 是一个开源的消息队列中间件,用于在分布式系统中进行消息传递和异步通信。RabbitMQ 基于 AMQP 协议,提供了可靠的消息传递机制和灵活的消息路由。它允许应用程序之间通过发送和接收消息进行解耦和通信

RabbitMQ 核心概念

  • 生产者(Producer):负责创建并发送消息到 RabbitMQ
  • 交换机(Exchange):消息的接收和分发中心,接收来自生产者的消息,并将消息路由到一个或多个对列中
  • 对列(Queue):RabbitMQ 中的消息存储区,保存了待消费的消息。生产者消息发送到一个队列,消费者可以尝试从一个队列接收数据
  • 消费者(Consumer):负责从队列中获取消息,并进行相应的处理

image-20231122022820079

生产者发送消息到 Broker,在 Broker 内部会创建 Exchange/Queue,并通过 Binding 规则将两者联系在一起,而后 Exchange 分发消息到 Queue 中,等待消费者取走

  • Broker(代理)是指 RabbitMQ 消息队列的核心组件,它充当消息的中间人,负责接收、存储和转发消息,Broker 是整个消息传递系统的中心枢纽。一个 Broker 实例代表着一个独立的消息队列服务器
  • 而出于多租户和安全因素设计,在 RabbitMQ 中,Virtual Host(虚拟主机)是一种逻辑隔离层,用于将不同的应用或环境隔离开,每个 Virtual Host 都有自己独立的交换机(Exchange)、队列(Queue)和绑定(Binding),它们彼此之间相互独立,互不干扰。当连接到 RabbitMQ 时,如果不指定 Virtual Host,将默认连接到该默认Virtual Host
  • Exchange(交换机)是消息的接收和分发中心,接收来自生产者的消息,并将消息路由到一个或多个对列中
  • Binding(绑定)是 Exchange 和 Queue 之间的关联关系。它定义了 Exchange 将消息路由到哪些 Queue 上
  • 对列(Queue)是 RabbitMQ 中的消息存储区,保存了待消费的消息。生产者消息发送到一个队列,消费者可以尝试从一个队列接收数据

Connection 是生产者/消费者与 Broker 之间的 TCP 连接。如果每一次访问 RabbitMQ 都建立一个 Connection,在消息量大的时候开销将是巨大的,Channel 是在 Connection 内部建立的逻辑连接,Channel 之间是完全隔离的。Channel 作为轻量级的 Connection 极大减少了操作系统建立 TCP Connection 的开销



RabbitMQ 安装部署

在安装 RabbitMQ 之前首先需要安装 Erlang 依赖,并且 RabbitMQ 和 Erlang 之间有版本依赖。具体查看官网选择版本 www.rabbitmq.com/which-erlan…

Repo 方式

  • 配置 REPO 文件:
 [root@linux ~]# cat > /etc/yum.repos.d/rabbitmq.repo <<EOF
 [erlang]
 name=erlang
 baseurl=https://yum1.novemberain.com/erlang/el/8/$basearch
         https://yum2.novemberain.com/erlang/el/8/$basearch
         https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/rpm/el/8/$basearch
 enabled=1
 gpgcheck=0
 ​
 [rabbitmq]
 name=rabbitmq
 baseurl=https://yum2.novemberain.com/rabbitmq/el/8/noarch
         https://yum1.novemberain.com/rabbitmq/el/8/noarch
         https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/rpm/el/8/noarch
 enabled=1
 gpgcheck=0
 EOF
  • 查看 Erlang 版本列表:
 [root@linux ~]# yum list erlang --showduplicates 
  • 安装 Erlang:
 [root@linux ~]# yum install -y erlang
  • 查看 RabbitMQ 版本列表:
 [root@linux ~]# yum list rabbitmq-server --showduplicates
  • 安装 RabbitMQ:
 [root@linux ~]# yum install -y rabbitmq-server
  • 启动 RabbitMQ 并配置开机自启:
 [root@linux ~]# systemctl enable --now rabbitmq-server.service


RPM 方式

  • 下载 Erlang 的 RPM 包:
 [root@linux ~]# wget https://github.com/rabbitmq/erlang-rpm/releases/download/v26.1.2/erlang-26.1.2-1.el8.x86_64.rpm
  • 安装 Erlang:
 [root@linux ~]# rpm -ivh erlang-26.1.2-1.el8.x86_64.rpm 
 warning: erlang-26.1.2-1.el8.x86_64.rpm: Header V4 RSA/SHA256 Signature, key ID cc4bbe5b: NOKEY
 Verifying...                          ################################# [100%]
 Preparing...                          ################################# [100%]
 Updating / installing...
    1:erlang-26.1.2-1.el8              ################################# [100%]
  • 下载 RabbitMQ 的 RPM 包:
 [root@linux ~]# wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.12.10/rabbitmq-server-3.12.10-1.el8.noarch.rpm
  • 安装 RabbitMQ:
 [root@linux ~]# rpm -ivh rabbitmq-server-3.12.10-1.el8.noarch.rpm 
 warning: rabbitmq-server-3.12.10-1.el8.noarch.rpm: Header V4 RSA/SHA512 Signature, key ID 6026dfca: NOKEY
 Verifying...                          ################################# [100%]
 Preparing...                          ################################# [100%]
 Updating / installing...
    1:rabbitmq-server-3.12.10-1.el8    ################################# [100%]
 [/usr/lib/tmpfiles.d/rabbitmq-server.conf:1] Line references path below legacy directory /var/run/, updating /var/run/rabbitmq → /run/rabbitmq; please update the tmpfiles.d/ drop-in file accordingly.




开启 RabbitMQ Web

  • 开启 RabbitMQ Web 插件:
 [root@linux ~]# rabbitmq-plugins enable rabbitmq_management
  • 访问 IP:15672 即可进入 RabbitMQ Web:默认的账号密码都为 guest

image-20231122055446049

  • 添加远程用户:RabbitMQ Web 默认仅限于本机 localhost 进行访问
 [root@linux ~]# rabbitmqctl add_user root 123456
  • 设置用户角色,分配操作权限:角色有四种,分别为
  • administrator:管理员;可以登录控制台查看所有信息,并对 RabbitMQ W进行管理
  • monToring:监控者;登录控制台查看所有信息
  • policymaker:策略制定者;登录控制台指定策略
  • managment:普通管理员;登录控制台
 [root@linux ~]# rabbitmqctl set_user_tags root administrator
  • 为用户添加资源权限:授予访问虚拟机根节点的所有权限
 [root@linux ~]# rabbitmqctl set_permissions -p / root ".*" ".*" ".*"

image-20231126041859880



RabbitMQ 端口

RabbitMQ 使用了多个端口来提供不同的服务和功能。RabbitM Q默认情况下使用的以下三个端口:

 [root@master01 ~]# ss -ntl
 State           Recv-Q          Send-Q           Local Address:Port         Peer Address:Port          Process
 LISTEN          0               128                    *:5672                     *:* 
 LISTEN          0               128              0.0.0.0:15672              0.0.0.0:*               
 LISTEN          0               128              0.0.0.0:25672              0.0.0.0:*            
  • 5672: RabbitMQ 的 AMQP(Advanced Message Queuing Protocol)协议端口,用于提供消息传递服务
  • 15672:RabbitMQ 的管理界面端口,用于访问 RabbitMQ 的 Web 管理控制台
  • 25672:RabbitMQ 的集群间节点通信端口