【星海随笔】RabbitMQ容器篇
上一篇手搓式 Rabbit 在不同的环境中,出现了各种依赖,比如condas 需要底层的认证库,但是rabbitMQ 版本对最新的认证库适配速度慢,导致有些在 Centos8 的时候才进行适配,就导致了 Centos7 本能够支持的一些最新的版本没有支持到。就出现了一些工具的依赖相互冲突的问题。
考虑到Centos7 在最新版本的时候,正式容器化盛行的时候,所以还是需要考虑到客观现实意义,这里再写一篇 docker 篇
启动
cat /etc/docker/daemon.json
{"registry-mirrors": ["https://hub.iyuu.cn","https://docker.1panel.live"]
}systemctl restart dockerdocker pull rabbitmq:4.0-management
> 这个版本指的是RabbitMQ 3.12.x 版本
相关版本信息,可以参考我之前的记录
【星海出品】rabbitMQ安装篇
https://xinghaizhuiqing.blog.csdn.net/article/details/151353959?spm=1011.2415.3001.5331
https://www.rabbitmq.com/release-information
docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
rabbitmq 4.0-management 1fa3315fc0aa 11 months ago 264MBmkdir -p /opt/rabbitmq/{conf,data,log}chmod -R 777 /opt/rabbitmq/{conf,data,log}docker run -it -d \
-p 5672:5672 \
-p 15672:15672 \
--init --memory 2G \
--restart=unless-stopped --privileged=true \
--name rabbitmq --hostname rabbitnode1 \
-e RABBITMQ_DEFAULT_USER=rabbitmq@Account \
-e RABBITMQ_DEFAULT_PASS=rabbitmq@Password \
-v /opt/rabbitmq/data:/var/lib/rabbitmq \
-v /opt/rabbitmq/conf:/etc/rabbitmq \
-v /opt/rabbitmq/log:/var/log/rabbitmq \
rabbitmq:4.0-management# --restart=always
# --restart=unless-stopped # 允许手动 stop 停止docker logs rabbitmq
docker rm -rf rabbitmq
sudo chmod 600 /opt/rabbitmq/data/.erlang.cookie 2>/dev/null || true
检查启动是否正常
# 查看端口占用情况
5672 / 15672
sudo netstat -tlnp | grep 25672# 查看启动日志
docker logs -f rabbitmq# 查看rabbitmq状态
docker exec rabbitmq rabbitmqctl status# 进入容器查看
docker exec -it rabbitmq bash# 退出容器
exit# 创建topic exchange
rabbitmqadmin declare exchange name=my_topic type=topic
docker exec rabbitmq rabbitmqadmin -u account -p password declare exchange --vhost=vhost_prod name=unlock_topic_exchange type=topic durable=true# 创建队列
rabbitmqadmin declare queue name=test_queue durable=true# 绑定队列
rabbitmqadmin declare binding source=my_topic destination=test_queue routing_key="test.#"
关闭容器
sudo systemctl stop rabbitmq-serversudo pkill -f beam.smp
交互
docker exec -it rabbitmq bashdocker exec rabbitmq rabbitmqctl statusdocker restart rabbitmq
插件管理
docker exec rabbitmq rabbitmq-plugins listListing plugins with pattern ".*" ...Configured: E = explicitly enabled; e = implicitly enabled| Status: * = running on rabbit@rabbitnode1|/
[ ] rabbitmq_amqp1_0 4.0.9
[ ] rabbitmq_auth_backend_cache 4.0.9
[ ] rabbitmq_auth_backend_http 4.0.9
。。。# 启用管理插件(必须的)
docker exec rabbitmq rabbitmq-plugins enable rabbitmq_management# 启用管理代理插件
docker exec rabbitmq rabbitmq-plugins enable rabbitmq_management_agent# 启用Web调度插件
docker exec rabbitmq rabbitmq-plugins enable rabbitmq_web_dispatch# 启用Prometheus监控插件(可选)
docker exec rabbitmq rabbitmq-plugins enable rabbitmq_prometheus# 开启插件的开机自启
rabbitmq-plugins enable rabbitmq_management
Enabling plugins on node rabbit@rabbitnode1:
rabbitmq_management
The following plugins have been configured:rabbitmq_managementrabbitmq_management_agentrabbitmq_web_dispatch
Applying plugin configuration to rabbit@rabbitnode1...
The following plugins have been enabled:rabbitmq_managementrabbitmq_management_agentrabbitmq_web_dispatchstarted 3 plugins.rabbitmq-plugins enable rabbitmq_web_dispatch
Enabling plugins on node rabbit@rabbitnode1:
rabbitmq_web_dispatch
The following plugins have been configured:rabbitmq_managementrabbitmq_management_agentrabbitmq_web_dispatch
Applying plugin configuration to rabbit@rabbitnode1...
Plugin configuration unchanged.rabbitmq-plugins enable rabbitmq_management_agent
Enabling plugins on node rabbit@rabbitnode1:
rabbitmq_management_agent
The following plugins have been configured:rabbitmq_managementrabbitmq_management_agentrabbitmq_web_dispatch
Applying plugin configuration to rabbit@rabbitnode1...
Plugin configuration unchanged.
创建topic
# Careful Here
-e RABBITMQ_DEFAULT_USER=rabbitmq@Account \
-e RABBITMQ_DEFAULT_PASS=rabbitmq@Password \export RABBITMQ_USER=admin
export RABBITMQ_PASSWORD=password# 创建topic exchange
docker exec rabbitmq rabbitmqadmin -u rabbitmq@Account -p rabbitmq@Password declare exchange name=my_topic_exchange type=topic durable=true# 创建几个测试队列
docker exec rabbitmq rabbitmqadmin -u rabbit@Account -p rabbitmq@password declare queue name=user_events durable=true
docker exec rabbitmq rabbitmqadmin -u rabbit@Account -p rabbitmq@password declare queue name=order_events durable=true
docker exec rabbitmq rabbitmqadmin -u rabbit@Account -p rabbitmq@password declare queue name=all_events durable=truedocker exec rabbitmq rabbitmqadmin -u rabbitmq@Account -p rabbitmq@Password declare queue name=aliV4_queue durable=truequeue declared# 绑定队列到topic exchange(使用不同的路由模式)
docker exec rabbitmq rabbitmqadmin -u rabbit@Account -p rabbitmq declare binding source=my_topic_exchange destination=user_events routing_key="user.*"
docker exec rabbitmq rabbitmqadmin -u rabbit@Account -p rabbitmq declare binding source=my_topic_exchange destination=order_events routing_key="order.#"
docker exec rabbitmq rabbitmqadmin -u rabbit@Account -p rabbitmq declare binding source=my_topic_exchange destination=all_events routing_key="#"docker exec rabbitmq rabbitmqadmin -u rabbit@Account -p rabbitmq@Password declare binding source=unlock_rclone_topic_exchange destination=rclone_queue routing_key="rclone.*"
# 虚拟主机绑定
docker exec rabbitmq rabbitmqadmin -u rabbit@Account -p rabbitmq@Password declare binding source=unlock_rclone_topic_exchange destination=rclone_queue routing_key="rclone.*" --vhost vhost_prod# 虚拟主机创建
docker exec rabbitmq rabbitmqadmin -u rabbit@Account -p rabbitmq@Password -V vhost_prod declare queue name=aliV4_queue