win下go使用虚拟机docker中RabbitMQ案例
一、查找rabbitmq镜像
docker search rabbitmq
二、拉取rabbitmq镜像
docker pull rabbitmq
三、启动容器
-d 表示后台运行
-p 表示端口映射
docker run -d --hostname my-rabbit --name rabbit -p 15672:15672 -p 5672:5672 rabbitmq:latest
四、装载可视化插件
docker ps -a # 查看运行的容器
docker exec -it xxxxxxx /bin/bash # 根据容器id进入容器内部
rabbitmq-plugins enable rabbitmq_management # 图形界面rabbitmq管理器插件
五、处理返回状态码500的问题
RabbitMQ Management API returned status code 500
# 需要先进入容器中操作
docker exec -it xxxxxxx /bin/bash # 根据容器id进入容器内部
# 执行下面命令
echo management_agent.disable_metrics_collector = false > management_agent.disable_metrics_collector.conf
# 之后需要退出容器,然后重启容器
docker restart 容器id
六、账户修改
1.创建admin账号:
# 需要先进入容器中操作
docker exec -it xxxxxxx /bin/bash # 根据容器id进入容器内部
# 添加账号admin, 密码admin
rabbitmqctl add_user admin admin
# 修改用户角色,将用户设为管理员
rabbitmqctl set_user_tags admin administrator
# 添加资源权限
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
2.如何修改其他账号:
# 列出所有的用户
rabbitmqctl list_users
# 修改密码
rabbitmqctl change_password admin '1234567'
# 删除用户
rabbitmqctl delete_user Username
七、处理rabbitmq管理页面点击channels弹窗问题
在网页端rabbitmq管理页面点击channels会提示:
Stats in management UI are disabled on this node
解决方案:
# 进入容器
docker exec -it 容器id /bin/bash
# 切换到对应的目录
cd /etc/rabbitmq/conf.d/
# 修改 management_agent.disable_metrics_collector = false
echo management_agent.disable_metrics_collector = false > management_agent.disable_metrics_collector.conf
# 退出容器
exit
# 重启容器
docker restart 容器id
最后到页面刷新即可,再次点击后面的菜单也不会有问题了,第一个页面的节点监控也出现了
八、添加Virtual Hosts并添加新账户设置对应Virtual Hosts
1.添加Virtual Hosts:
打开网页端的rabbitmq管理页面,admin账户登录之后点击上面的admin标签页,再点击右侧的Virtual Hosts
导航
在下方Add a new virtual host
板块
填入Name
,然后点击Add virtual host
2.添加账户并设置virtual hosts:
切换到Users标签,左下点击Add a user
输入用户名、密码、Tags选择右侧的Admin
添加完成之后因为没有设置virtual hosts
所以会显示No access
点击左侧用户名,进入详情页面设置即可,最后点击Set permission
九、Windows下Go项目连接虚拟机Linux中的rabbitmq所在的docker容器
代码案例见下方GitHub地址
1.Simple模式
2.Work模式
一个消息只能被一个消费者获取
3.Publish/Subscribe订阅模式
消息被路由投递到多个队列,一个消息被多个消费者获取
4.Routing路由模式
一个消息被多个消费者获取,并且消息的目标队列可被生产者指定
5.Topic话题模式
一个消息被多个消费者获取,消息的目标queue可用BindingKey以通配符(#:一个或多个词,*:一个词)的方式指定