Docker方式
安装Docker
https://www.psvmc.cn/article/2018-12-13-docker-install.html
安装RabbitMQ
1 | docker run -dit --name rabbitmq --hostname=rabbitmqhostone -p 5672:5672 -p 15672:15672 --restart=always rabbitmq:3-management |
如果创建时未指定 –restart=always ,可通过update 命令设置
1 | docker update --restart=always rabbitmq |
还可以在使用on-failure
策略时,指定Docker将尝试重新启动容器的最大次数。默认情况下,Docker将尝试永远重新启动容器。
1 | docker update --restart=on-failure:10 rabbitmq |
就可以通过http://ip:15672
访问管理页面
默认创建的用户guest,密码也是guest。
登录后直接添加新用户,之后用新用户登录,删除guest用户。
注意
在
docker
环境中配置rabbitmq
时
rabbitmq的数据库名称规则是,NODENAME@hostname
,Docker每次从docker image
启动容器的时候会自动生成hostname,这样一来,你保存在主机上的数据库就会没用了,包括之前创建的用户也会没有了。所以在创建容器的时候必须指定
--hostname=rabbitmqhostone
,这样docker环境启动后rabbitmq就会一直读取固定目录中的数据了
使用方式可参见:RabbitMQ实战代码 | 码客 (psvmc.cn)
用户操作
添加用户
设置用户权限
删除旧用户
点击上面的菜单的Admin,选择用户guest,拉到最下面点击Delete this user
,删除用户。
主机安装方式
安装
RabbitMQ和erlang的版本对应关系:RabbitMQ Erlang Version Requirements — RabbitMQ
卸载旧版本
1 | yum remove -y rabbitmq-server |
先安装erlang
1 | curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash |
yum 安装 erlang
1 | yum -y install erlang |
验证是否成功
1 | erl -v |
完成后安装RabbitMQ
下载RabbitMQ public signing key
1 | rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc |
下载RabbitMQ的rpm包
1 | wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.17/rabbitmq-server-3.8.17-1.el7.noarch.rpm |
yum安装下载的RabbitMQ的rpm包
1 | yum -y install rabbitmq-server-3.8.17-1.el7.noarch.rpm |
设置开机自动启动
1 | chkconfig rabbitmq-server on |
完成后启动服务:
1 | service rabbitmq-server restart |
查看版本
1 | sudo rabbitmqctl status | grep rabbit |
可以查看服务状态:
1 | service rabbitmq-server status |
找到其中类似一下的一行
1 | Logs: /var/log/rabbitmq/rabbit@izhp3fm4qmc7vnoeegv7zyz.log |
打开对应的文件
1 | vi /var/log/rabbitmq/rabbit@izhp3fm4qmc7vnoeegv7zyz.log |
里面有这样的一行
1 | config file(s) : /etc/rabbitmq/rabbitmq.config (not found) |
配置文件未找到 那我们新建配置文件
1 | cd /etc/rabbitmq/ |
编辑内容如下:
1 | [{rabbit, [{loopback_users, []}]}]. |
这里的意思是开放使用
默认创建的用户guest,密码也是guest。
该用户不能用于远程登录,可用于管理UI的登录。
保存配置后重启服务:
1 | service rabbitmq-server stop |
开放5672端口:
1 | firewall-cmd --zone=public --add-port=5672/tcp --permanent |
开机自启动
1 | chkconfig rabbitmq-server on |
查看
1 | chkconfig --list |
添加用户
图形化管理
开启管理UI:
1 | rabbitmq-plugins enable rabbitmq_management |
就可以通过http://ip:15672
访问管理页面
命令行管理
在/etc/rabbitmq/rabbitmq.config
配置文件下(如果不存在就自行创建)添加
1 | [ |
添加用户
1 | rabbitmqctl add_user admin admin |
授权
1 | rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*" |
设置用户角色
1 | rabbitmqctl set_user_tags admin administrator |
查看新添加的admin
1 | rabbitmqctl list_users |
查看用于的权限
1 | rabbitmqctl list_permissions -p / |
打开地址:http://ip:15672
,使用admin/admin
即可登录
RabbitMQ集群
集群配置和启动
如果是在一台机器上同时启动多个 RabbitMQ 节点来组建集群的话,只用上面介绍的方式启动第二、第三个节点将会因为节点名称和端口冲突导致启动失败。
所以在每次调用 rabbitmq-server 命令前,设置环境变量 RABBITMQ_NODENAME
和 RABBITMQ_NODE_PORT
来明确指定唯一的节点名称和端口。
下面的例子端口号从5672开始,每个新启动的节点都加1,节点也分别命名为test_rabbit_1、test_rabbit_2、test_rabbit_3。
启动第1个节点:
1 | RABBITMQ_NODENAME=test_rabbit_1 RABBITMQ_NODE_PORT=5672 /usr/sbin/rabbitmq-server -detached |
启动第2个节点:
1 | RABBITMQ_NODENAME=test_rabbit_2 RABBITMQ_NODE_PORT=5673 /usr/sbin/rabbitmq-server -detached |
启动第2个节点前建议将 RabbitMQ 默认激活的插件关掉,否则会存在使用了某个插件的端口号冲突,导致节点启动不成功。
现在第2个节点和第1个节点都是独立节点,它们并不知道其他节点的存在。
集群中除第一个节点外后加入的节点需要获取集群中的元数据,所以要先停止 Erlang 节点上运行的 RabbitMQ 应用程序,并重置该节点元数据,再加入并且获取集群的元数据,最后重新启动 RabbitMQ 应用程序。
停止第2个节点的应用程序:
1 | /usr/sbin/rabbitmqctl -n test_rabbit_2 stop_app |
重置第2个节点元数据:
1 | /usr/sbin/rabbitmqctl -n test_rabbit_2 reset |
第2节点加入第1个节点组成的集群:
1 | /usr/sbin/rabbitmqctl -n test_rabbit_2 join_cluster test_rabbit_1@localhost |
启动第2个节点的应用程序
1 | /usr/sbin/rabbitmqctl -n test_rabbit_2 start_app |
第3个节点的配置过程和第2个节点类似:
1 | RABBITMQ_NODENAME=test_rabbit_3 RABBITMQ_NODE_PORT=5674 /usr/sbin/rabbitmq-server -detached |
集群运维
停止某个指定的节点,比如停止第2个节点:
1 | RABBITMQ_NODENAME=test_rabbit_2 /usr/sbin/rabbitmqctl stop |
查看节点3的集群状态:
1 | /usr/sbin/rabbitmqctl -n test_rabbit_3 cluster_status |
管理页面
Overview
Totals
所有队列的阻塞情况
- Ready:待消费的消息总数。
- Unacked:待应答的消息总数。
- Total:总数 Ready+Unacked。
所有队列的消费情况
速率=(num1-num0)/(s1-s0) num1:s1时刻的个数。num0:s0时刻的个数。
- Publish:producter pub消息的速率。
- Publisher confirm:broker确认pub消息的速率。
- Deliver(manual ack):customer手动确认的速率。
- Deliver( auto ack):customer自动确认的速率。
- Consumer ack:customer正在确认的速率。
- Redelivered:正在传递’redelivered’标志集的消息的速率。
- Get (manual ack):响应basic.get而要求确认的消息的传输速率。
- Get (auto ack):响应于basic.get而发送不需要确认的消息的速率。
- Return:将basic.return发送给producter的速率。
- Disk read:queue从磁盘读取消息的速率。
- Disk write:queue从磁盘写入消息的速率。
整体数量
- Connections:client的tcp连接的总数。
- Channels:通道的总数。
- Exchange:交换器的总数。
- Queues:队列的总数。
- Consumers:消费者的总数。
Nodes
启动一个broker都会产生一个node。
broker的属性
- Name:broker名称
- File descriptors:broker打开的文件描述符和限制。
- Socket descriptors:broker管理的网络套接字数量和限制。当限制被耗尽时,RabbitMQ将停止接受新的网络连接。
- Erlang processes:erlang启动的进程数。
- Memory:当前broker占用的内存。
- Disk space:当前broker占用的硬盘。
- Uptime:当前broker持续运行的时长。
- Info:未知。
- Reset stats:未知。
Ports and contexts
Export definitions
定义由用户,虚拟主机,权限,参数,交换,队列和绑定组成。 它们不包括队列的内容或集群名称。 独占队列不会被导出。
Export definitions
导入的定义将与当前定义合并。 如果在导入过程中发生错误,则所做的任何更改都不会回滚。
Connections
当前所有客户端活动的连接。包括生成者和消费者。
连接的属性
- Name:名称。
- User name:使用的用户名。
- State:当前的状态,running:运行中;idle:空闲。
- SSL/TLS:是否使用ssl进行连接。
- Protocol:使用的协议。
- Channels:创建的channel的总数。
- From client:每秒发出的数据包。
- To client:每秒收到的数据包。
Channels
当前连接所有创建的通道。
通道的属性
- Channel:名称。
- User name:使用的用户名。
- Mode:渠道保证模式。 可以是以下之一,或者不是:C: confirm。T:transactional(事务)。
- State :当前的状态,running:运行中;idle:空闲。
- Unconfirmed:待confirm的消息总数。
- Prefetch:设置的prefetch的个数。
- Unacker:待ack的消息总数。
- publish:producter pub消息的速率。
- confirm:producter confirm消息的速率。
- deliver/get:consumer 获取消息的速率。
- ack:consumer ack消息的速率。
Exchanges
交换器属性
- Name:名称。
- Type:exchange type。
- Features:功能。 可以是以下之一,或者不是:D: 持久化。T:Internal,存在改功能表示这个exchange不可以被client用来推送消息,仅用来进行exchange和exchange之间的绑定,否则可以推送消息也可以绑定。
- Message rate in:消息进入的速率。
- Message rate out:消息出去的速率。
Queues
相关属性
- Name:名称。
- Features:功能。 可以是以下之一,或者不是:D: 持久化。
- State:当前的状态,running:运行中;idle:空闲。
- Ready:待消费的消息总数。
- Unacked:待应答的消息总数。
- Total:总数 Ready+Unacked。
- incoming:消息进入的速率。
- deliver/get:消息获取的速率。
- ack:消息应答的速率。
Admin
用户属性
- Name:名称。
- Tags:角色标签,只能选取一个。
- Can access virtual hosts:允许进入的vhost。
- Has password:设置了密码。
角色
- administrator (超级管理员)
可登陆管理控制台(启用management plugin的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作。 - monitoring(监控者)
可登陆管理控制台(启用management plugin的情况下),同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等) - policymaker(策略制定者)
可登陆管理控制台(启用management plugin的情况下), 同时可以对policy进行管理。 - management(普通管理者)
仅可登陆管理控制台(启用management plugin的情况下),无法看到节点信息,也无法对策略进行管理。 - none(其他)
无法登陆管理控制台,通常就是普通的生产者和消费者。