2.RabbitMQ
2.1RabbitMQ 的概念
RabbitMQ 是一个消息中间件:它接受并转发消息。你可以把它当做一个快递站点,当你要发送一个包裹时,你把你的包裹放到快递站,快递员最终会把你的快递送到收件人那里,按照这种逻辑 RabbitMQ 是一个快递站,一个快递员帮你传递快件。 RabbitMQ 与快递站的主要区别在于,它不处理快件而是接收,在·存储和转发消息数据
15672是rabbitMQ网页管理监听端口,5672是客户端使用的端口
2.2四大核心概念
| 1.生产者 |
| 产生数据发送消息的程序是生产者 |
| |
| 2.交换机 |
| 交换机是 RabbitMQ 非常重要的一个部件,一方面它接收来自生产者的消息,另一方面它将消息推送到队列中。交换机必须确切知道如何处理它接收到的消息,是将这些消息推送到特定队列还是推送到多个队列,亦或者是把消息丢弃,这个得有交换机类型决定 |
| |
| 3.队列 |
| 队列是 RabbitMQ 内部使用的一种数据结构,尽管消息流经 RabbitMQ 和应用程序,但它们只能存储在队列中。队列仅受主机的内存和磁盘限制的约束,本质上是一个大的消息缓冲区。许多生产者可以将消息发送到一个队列,许多消费者可以尝试从一个队列接收数据。这就是我们使用队列的方式 |
| |
| 4.消费者 |
| 消费与接收具有相似的含义。消费者大多时候是一个等待接收消息的程序。 请注意生产者,消费者和消息中间件很多时候并不在同一机器上。同一个应用程序既可以是生产者又是可以是消费者。 |
2.3RabbitMQ 核心部分



| Consumer:消息的消费者,表示一个从消息队列中取得消息的客户端应用程序。 |
| |
| Broker:接收和分发消息的应用,RabbitMQ Server 就是 Message Broker,表示消息队列服务器实体 |
| |
| Virtual host:虚拟主机,表示一批交换器、消息队列和相关对象。虚拟主机是共享相同的身份认证和加密环境的独立服务器域。每个 vhost 本质上就是一个 mini 版的 RabbitMQ 服务器,拥有自己的队列、交换器、绑定和权限机制。vhost 是 AMQP 概念的基础,必须在连接时指定,RabbitMQ 默认的 vhost 是 / 。 |
| |
| Connection:publisher/consumer 和 broker 之间的 TCP 连接 |
| |
| Channel:信道,多路复用连接中的一条独立的双向数据流通道。信道是建立在真实的TCP连接内的虚拟连接,AMQP 命令都是通过信道发出去的,不管是发布消息、订阅队列还是接收消息,这些动作都是通过信道完成。因为对于操作系统来说建立和销毁 TCP 都是非常昂贵的开销,所以引入了信道的概念,以复用一条 TCP 连接。 |
| |
| Exchange:交换器,用来接收生产者发送的消息并将这些消息路由给服务器中的队列。message 到达 broker 的第一站,根据分发规则,匹配查询表中的 routing key,分发消息到 queue 中去。Exchange有4种类型:direct(默认),fanout, topic, 和headers,不同类型的Exchange转发消息的策略有所区别。 |
| |
| Queue:消息队列,用来保存消息直到发送给消费者。它是消息的容器,也是消息的终点。一个消息可投入一个或多个队列。消息一直在队列里面,等待消费者连接到这个队列将其取走。Exchange 和Queue的绑定可以是多对多的关系。 |
| |
| Binding:绑定,用于消息队列和交换器之间的关联。一个绑定就是基于路由键将交换器和消息队列连接起来的路由规则,所以可以将交换器理解成一个由绑定构成的路由表。 |
| |
| Message:消息,消息是不具名的,它由消息头和消息体组成。消息体是不透明的,而消息头则由一系列的可选属性组成,这些属性包括routing-key(路由键)、priority(相对于其他消息的优先权)、delivery-mode(指出该消息可能需要持久性存储)等。 |
| |
| Publisher:消息的生产者,也是一个向交换器发布消息的客户端应用程序。 |
| |
2.4安装
1.官网地址
https://www.rabbitmq.com/download.html
2.文件上传

3.安装文件(分别按照以下顺序安装)
| rpm -ivh erlang-21.3-1.el7.x86_64.rpm |
| yum install socat -y |
| rpm -ivh rabbitmq-server-3.8.8-1.el7.noarch.rpm |
| 常用命令(按照以下顺序执行) |
| 添加开机启动 RabbitMQ 服务 |
| chkconfig rabbitmq-server on |
| |
| 启动服务 |
| /sbin/service rabbitmq-server start |
启动报错ERROR: epmd error for host 192: badarg (unknown POSIX error)

| 因为我linux主机的名称是数字的原因造成此问题的。解决方法如下: |
| 首先查看了主机名称 |
| hostnamectl status |

接着来设置一下主机名,输入(就是你要设置的主机名):
| hostnamectl set-hostname 新主机名 |



把刚才修改后的名字添加进去就可以,我的问题就是这样解决的。
大佬地址:https://blog.csdn.net/kang_tian/article/details/105719318
| 查看服务状态 |
| /sbin/service rabbitmq-server status |

开启web管理插件前需要先关闭rabbitMQ服务
| 停止服务(选择执行) |
| /sbin/service rabbitmq-server stop |
| |
| 开启 web 管理插件 |
| rabbitmq-plugins enable rabbitmq_management |
| |
| 开启web插件后再启动rabbitMQ服务 |
| /sbin/service rabbitmq-server start |
访问不到web管理页面需要防火墙放开端口
开放防火墙端口:
| 添加指定需要开放的端口: |
| firewall-cmd --add-port=15672/tcp --permanent |
| 重载入添加的端口: |
| firewall-cmd --reload |
| 查询指定端口是否开启成功: |
| firewall-cmd --query-port=15672/tcp |
2.5用户及权限
用默认账号密码(guest)访问地址 http://{ip}:15672/出现权限问题

2.5.1添加一个新的用户
| 创建账号 |
| rabbitmqctl add_user admin 123 |
| |
| 设置用户角色 |
| rabbitmqctl set_user_tags admin administrator |
| |
| 设置用户权限 |
| rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*" |
| |
| 说明: |
| set_permissions [-p <vhostpath>] <user> <conf> <write> <read> |
| 用户 user_admin 具有/vhost1 这个 virtual host 中所有资源的配置、写、读权限 |
| 查看当前用户和角色 |
| rabbitmqctl list_users |

再次利用 admin 用户登录

2.6常用命令
大佬地址:https://www.cnblogs.com/hanxiaohui/p/8904268.html(请直接查看大佬的博客)
1)启动、关闭 rabbitmq节点和应用
| |
| rabbitmq-server -detached |
| |
| netstat -lnp | grep beam |
| |
| rabbitmqctl stop |
| rabbitmqctl start_app |
| rabbitmqctl stop_app |
2)开启rabbitmq控制台
| rabbitmq-plugins enable rabbitmq_management |
| netstat -lnp | grep beam |
3)用户管理
| 用户管理包括增加用户,删除用户,查看用户列表,修改用户密码。 |
| (1) 新增一个用户 |
| rabbitmqctl add_user Username Password |
| (2) 删除一个用户 |
| rabbitmqctl delete_user Username |
| (3) 修改用户的密码 |
| rabbitmqctl change_password Username Newpassword |
| (4) 查看当前用户列表 |
| rabbitmqctl list_users |
| |
| 例: |
| 添加rabbitmq控制台管理员用户 |
| rabbitmqctl add_user admin admin |
| rabbitmqctl set_user_tags admin administrator |
| |
| |
| rabbitmqctl set_user_tags user_proj management |
4)用户角色
| 用户角色可分为五类,超级管理员, 监控者, 策略制定者, 普通管理者以及其他。 |
| (1) 超级管理员(administrator) |
| 可登陆管理控制台(启用management plugin的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作。 |
| (2) 监控者(monitoring) |
| 可登陆管理控制台(启用management plugin的情况下),同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等) |
| (3) 策略制定者(policymaker) |
| 可登陆管理控制台(启用management plugin的情况下), 同时可以对policy进行管理。但无法查看节点的相关信息(上图红框标识的部分)。 |
| 与administrator的对比,administrator能看到这些内容 |
| (4) 普通管理者(management) |
| 仅可登陆管理控制台(启用management plugin的情况下),无法看到节点信息,也无法对策略进行管理。 |
| (5) 其他 |
| 无法登陆管理控制台,通常就是普通的生产者和消费者。 |
| 了解了这些后,就可以根据需要给不同的用户设置不同的角色,以便按需管理。 |
| |
| 设置用户角色的命令为: |
| rabbitmqctl set_user_tags User Tag |
| User为用户名, Tag为角色名(对应于上面的administrator,monitoring,policymaker,management,或其他自定义名称)。 |
| 也可以给同一用户设置多个角色,例如 |
| rabbitmqctl set_user_tags hncscwc monitoring policymaker |
5)用户权限
| 用户权限指的是用户对exchange,queue的操作权限,包括配置权限,读写权限。配置权限会影响到exchange,queue的声明和删除。读写权限影响到从queue里取消息,向exchange发送消息以及queue和exchange的绑定(bind)操作。 |
| 例如: 将queue绑定到某exchange上,需要具有queue的可写权限,以及exchange的可读权限;向exchange发送消息需要具有exchange的可写权限;从queue里取数据需要具有queue的可读权限。详细请参考官方文档中"How permissions work"部分。 |
| 相关命令为: |
| (1) 设置用户权限 |
| rabbitmqctl set_permissions -p VHostPath User ConfP WriteP ReadP |
| (2) 查看(指定hostpath)所有用户的权限信息 |
| rabbitmqctl list_permissions [-p VHostPath] |
| (3) 查看指定用户的权限信息 |
| rabbitmqctl list_user_permissions User |
| (4) 清除用户的权限信息 |
| rabbitmqctl clear_permissions [-p VHostPath] User |
6)vhost操作
| rabbitmqctl delete_vhost / |
| rabbitmqctl add_vhost / |
| rabbitmqctl list_vhosts |
| rabbitmqctl set_permissions -p / guest '.*' '.*' '.*' |
| rabbitmqctl list_permissions -p / |
| rabbitmqctl list_user_permissions guest |
7)queue操作
8)集群节点的操作
| 列出集群状态 |
| rabbitmqctl cluster_status |
| |
| 添加节点 |
| rabbitmqctl stop_app |
| rabbitmqctl join_cluster {--ram|--disk} rabbit@xxx |
| rabbitmqctl start_app |
| |
| 修改节点存储类型 |
| 集群中必须存活一个磁盘节点 |
| rabbitmqctl stop_app |
| rabbitmqctl change_cluster_node_type {ram|disk} |
| rabbitmqctl start_app |
| |
| 将xxx踢除集群 |
| ./rabbitmqctl forget_cluster_node rabbit@xxx |
9)清空消息
| 这个方法 会把用户也给清楚了关闭应用:rabbitmqctl stop_app |
| 清空队列:rabbitmqctl reset |
| 重启应用:rabbitmqctl start_app |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步