前言
以前写过几篇rabbitmq的博客:
- 安装rabbitmq
- RabbitMQ集群搭建
-
RabbitMQ死信队列管理
不过都是基于centos的,而且已经时隔两年了。现在回想当初玩RabbitMQ,其实也是没有想明白要怎么使用MQ这个技术组件。最近有机会重新折腾,趁着转战ubuntu的机会,重新整理相关内容。可能也会涉及更多的内容。
docker安装单机版
sudo docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.9-management
是的,上面的命令就完成了rabbitmq的安装及启动。要么说,docker时隔好东西呀。
不过呢,这个指令是前台启动的指令,也就是帮助我们完成一个安装rabbitmq的hello world吧。
解释一下:
- -it: 这其实是两个参数:-i 打开DTDIN,用户控制台交互;-t 分配tty设备,可以支持终端登录
- -rm: 容器停止后自动删除容器。所以,如果你通过ctrl+c退出,则
- -name rabbitmq :给这个容器命名。
- -p: 我们看到有两个-p,后面跟的分别是5672:5672和15672:15672。这个配置的是容器的两个端口与本地端口的映射。其中5672是mq的运行端口,15672是mq的web管理界面的端口。管理界面的默认用户名密码是:guest/guest
- rabbitmq:3.9-management:使用的容器实例,我本地是没有的,它会自动去hub上查找并下载。
但是这明显不是我们要的。鉴于目前没有什么特殊的功能要求,我们只对镜像做调整:
- 后台启动:-d
- 开机启动:开机启动由两点进行保障。第一是docker服务开机启动,第二是docker服务启动后自动启动镜像,通过添加参数–restart=always来保证。
- 关闭后不自动销毁:去除-rm参数
最后的指令为:
sudo docker run -d --restart=always --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.9-management
至此,docker安装rabbitmq单机版搞定。
安装包安装
安装
参考官方说明:官方说明
为了让用户可以安装到最新的rabbitmq,官方提供了Cloudsmith和PackageCloud两个镜像,并分别提供了相关的安装引导。以下是提供的Cloudsmith安装脚本
#!/usr/bin/sh
sudo apt-get install curl gnupg apt-transport-https -y
## Team RabbitMQ's main signing key
curl -1sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg > /dev/null
## Cloudsmith: modern Erlang repository
curl -1sLf https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/gpg.E495BB49CC4BBE5B.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/io.cloudsmith.rabbitmq.E495BB49CC4BBE5B.gpg > /dev/null
## Cloudsmith: RabbitMQ repository
curl -1sLf https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/gpg.9F4587F226208342.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/io.cloudsmith.rabbitmq.9F4587F226208342.gpg > /dev/null
## Add apt repositories maintained by Team RabbitMQ
sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF
## Provides modern Erlang/OTP releases
##
deb [signed-by=/usr/share/keyrings/io.cloudsmith.rabbitmq.E495BB49CC4BBE5B.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/ubuntu focal main
deb-src [signed-by=/usr/share/keyrings/io.cloudsmith.rabbitmq.E495BB49CC4BBE5B.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/ubuntu focal main
## Provides RabbitMQ
##
deb [signed-by=/usr/share/keyrings/io.cloudsmith.rabbitmq.9F4587F226208342.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/ubuntu focal main
deb-src [signed-by=/usr/share/keyrings/io.cloudsmith.rabbitmq.9F4587F226208342.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/ubuntu focal main
EOF
## Update package indices
sudo apt-get update -y
## Install Erlang packages
sudo apt-get install -y erlang-base \
erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \
erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \
erlang-runtime-tools erlang-snmp erlang-ssl \
erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl
## Install rabbitmq-server and its dependencies
sudo apt-get install rabbitmq-server -y --fix-missing
安装成功
基础操作
启动rabbitmq
sudo systemctl start rabbitmq-server
设置开机启动
sudo systemctl enable rabbitmq-server
启用可视化界面
启用可视化界面
sudo rabbitmq-plugins enable rabbitmq_management
输入默认账号: guest 密码: guest,但只允许通过localhost进行访问。我们创建一个新账号用来管理。
sudo rabbitmqctl add_user admin admin
sudo rabbitmqctl set_user_tags admin administrator
sudo rabbitmqctl set_permissions -p / admin '.*' '.*' '.*'
sudo rabbitmqctl list_permissions
最后一行可以看到新的admin账号已经添加进去了。admin的密码如果需要别的,可以在第一个指令的最后一个参数那里进行修改。
修改配置文件
默认rabbitmq是没有创建它的配置文件的。它的默认位置是在/etc/rabbitmq。我们可以创建一个空的配置文件
sudo vim /etc/rabbitmq/rabbitmq.conf
加入如下配置
loopback_users.guest=false
重启你的rabbitmq服务。这个时候,如果你可以通过远程界面登录guest帐号了。上面的配置是让guest账号可以远程登录
启用MQTT
进入docker
sudo docker exec -it rabbitmq bash
启用插件
rabbitmq-plugins enable rabbitmq_mqtt
默认mqtt插件是不可以匿名访问的,但是硬件不一定支持使用用户名密码。所以,我们添加如下配置
mqtt.allow_anonymous = true
mqtt.default_user = mqtt
mqtt.default_pass = mqtt
上述配置的意思是,mqtt允许匿名访问(默认不允许),默认使用用户名mqtt,默认密码为mqtt
这时,你使用MQTT.fx客户端不设置用户名密码即可连接到rabbitmq了。