环境准备
操作系统:macOS Big Sur 11.2.1 版本
编译环境:Erlang/OTP rabbitmq是通过erlang语言来开发的,所有需要通过erlang相关的编译环境,我这块是通过homebrew来进行Erlang的安装的,安装命令如下:
brew install erlang
rabbitmq安装包:rabbitmq-server-generic-unix-3.8.12.tar.xz 下载地址为官网如下:
https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.12/rabbitmq-server-generic-unix-3.8.12.tar.xz
部署流程
安装Erlang/OTP编译环境,保证该环境的正常运行,如果您已经安装完成,该步骤可以省略
下载rabbitmq安装包并解压
首先通过我上面写的地址讲安装包进行下载并解压,解压完成后出现的是rabbitmq_server-3.8.12的文件夹,该文件夹里面包含了运行所需要的所有的命令和资源信息,同时该文件夹将会成为你后续的所有操作的基础路径,包括常用的rabbitmq的启动命令和插件控制等,所以在操作前可以先将该文件夹放到一个你认为最合适的位置再进行后续的操作,例如/usr/local这样的工具常用存储地址;
启动rabbitmq-server服务
首先进入 rabbitmq_server-3.8.12 所在文件夹,进入sbin目录,在当前目录下执行rabbitmq-server启动命令,命令如下:
./rabbitmq-server
启动的过程可能会一波三折,也可能会比较顺利,我在启动的过程中主要碰到了下面的异常总结中的两个问题,如果启动过程没有报错,并且出现了如下的提示:
Configuring logger redirection
## ## RabbitMQ 3.8.12
## ##
########## Copyright (c) 2007-2021 VMware, Inc. or its affiliates.
###### ##
########## Licensed under the MPL 2.0. Website: https://rabbitmq.com
Doc guides: https://rabbitmq.com/documentation.html
Support: https://rabbitmq.com/contact.html
Tutorials: https://rabbitmq.com/getstarted.html
Monitoring: https://rabbitmq.com/monitoring.html
Logs: /xxx/rabbitmq_server-3.8.12/var/log/rabbitmq/rabbit@xxx.log
/xxx/rabbitmq_server-3.8.12/var/log/rabbitmq/rabbit@xxx_upgrade.log
Config file(s): (none)
Starting broker... completed with 0 plugins.
恭喜你,你的rabbitmq已经正确启动成功啦,默认启动的端口是5672
将相关命令加入全局命令
当前如果你不在服务命令所在文件夹中,执行相关的命令会报命令无法找到的异常,这是由于当前命令还不是一个全局命令造成的,只需要将命令行文件夹加入到PATH中即可,假如你安装在了 /usr/local 文件夹下,则只需要在 .bashrc 中添加如下语句:
export PATH="/xxx/rabbitmq_server-3.8.12/sbin:$PATH"
如果你使用的是zsh,则只需要在 .zshrc 文件中添加即可,然后执行下面的生效命令:
source .zshrc
这个时候就可以在任意文件夹下执行rabbitmq的相关命令啦
启动RabbitMq管理后台插件
首先查看当前可用的插件,查看插件的命令如下:
rabbitmq-plugins list
查看结果如下:
Listing plugins with pattern ".*" ...
Configured: E = explicitly enabled; e = implicitly enabled
| Status: * = running on rabbit@zhang
|/
[ ] rabbitmq_amqp1_0 3.8.12
[ ] rabbitmq_auth_backend_cache 3.8.12
[ ] rabbitmq_auth_backend_http 3.8.12
[ ] rabbitmq_auth_backend_ldap 3.8.12
[ ] rabbitmq_auth_backend_oauth2 3.8.12
[ ] rabbitmq_auth_mechanism_ssl 3.8.12
[ ] rabbitmq_consistent_hash_exchange 3.8.12
[ ] rabbitmq_event_exchange 3.8.12
[ ] rabbitmq_federation 3.8.12
[ ] rabbitmq_federation_management 3.8.12
[ ] rabbitmq_jms_topic_exchange 3.8.12
[ ] rabbitmq_management 3.8.12
[ ] rabbitmq_management_agent 3.8.12
[ ] rabbitmq_mqtt 3.8.12
[ ] rabbitmq_peer_discovery_aws 3.8.12
[ ] rabbitmq_peer_discovery_common 3.8.12
[ ] rabbitmq_peer_discovery_consul 3.8.12
[ ] rabbitmq_peer_discovery_etcd 3.8.12
[ ] rabbitmq_peer_discovery_k8s 3.8.12
[ ] rabbitmq_prometheus 3.8.12
[ ] rabbitmq_random_exchange 3.8.12
[ ] rabbitmq_recent_history_exchange 3.8.12
[ ] rabbitmq_sharding 3.8.12
[ ] rabbitmq_shovel 3.8.12
[ ] rabbitmq_shovel_management 3.8.12
[ ] rabbitmq_stomp 3.8.12
[ ] rabbitmq_top 3.8.12
[ ] rabbitmq_tracing 3.8.12
[ ] rabbitmq_trust_store 3.8.12
[ ] rabbitmq_web_dispatch 3.8.12
[ ] rabbitmq_web_mqtt 3.8.12
[ ] rabbitmq_web_mqtt_examples 3.8.12
[ ] rabbitmq_web_stomp 3.8.12
[ ] rabbitmq_web_stomp_examples 3.8.12
启动插件的命令是:
rabbitmq-plugins enable xxx
停止插件的命令是:
rabbitmq-plugins disable xxx
上面列表里面的 rabbitmq_management 插件就是管理后台,通过启动插件命令将该插件启动起来:
rabbitmq-plugins enable rabbitmq_management
启动结果如下:
Enabling plugins on node rabbit@xxx:
rabbitmq_management
The following plugins have been configured:
rabbitmq_management
rabbitmq_management_agent
rabbitmq_web_dispatch
Applying plugin configuration to rabbit@xxx...
The following plugins have been enabled:
rabbitmq_management
rabbitmq_management_agent
rabbitmq_web_dispatch
started 3 plugins.
管理后台的默认端口是 15672,通过 http://localhost:15672 就可以直接访问RabbitMq管理后台啦,管理后台的默认用户名是 guest,密码是 guest,但是这个地方有一个主要注意的地方,guest这个用户名只能在本机通过 localhost 或 127.0.0.1 来进行访问,其他IP或域名不可以通过默认的guest用户名来进行访问
常用命令
rabbitmq-server : 服务节点管理
后台启动服务
rabbitmq-server -detached
rabbitmqctl : 命令行管理工具
停止指定运行节点
rabbitmqctl shutdown {nodeName}
查看帮助信息,也可以查看单个命令的帮助信息
rabbitmqctl help [commandName]
添加用户名和密码
rabbitmqctl add_user [username] [password]
删除用户
rabbitmqctl delete_user [username]
用户列表
rabbitmqctl list_users
rabbitmq-plugins : 插件管理工具
可用插件列表
rabbitmq-plugins list
启用 rabbitmq_top 插件
rabbitmq-plugins enable rabbitmq_top
停用 rabbitmq_top 插件
rabbitmq-plugins disable rabbitmq_top
用户列表
rabbitmqctl list_users
rabbitmq-diagnostics : 诊断、监控与健康检查工具
rabbitmq-queues : 队列管理工具
rabbitmq-upgrade : 安装升级工具
注意事项
RabbitMq默认启动的是5672端口,所以在启动前要保证5672端口没有被占用
RabbitMq管理系统插件默认启动的是15672端口
启动过程中默认会启动epmd,对应的端口是4369,是Erlang的端口/结点名称映射程序,用来跟踪节点名称监听地址
异常总结
编译服务报错: ./rabbitmq-server: line 80: erl: command not found
我在安装的过程中没有认真的查看官方文档,所以下载完成并解压后直接在rabbitmq的文件夹下的sbin目录下执行了启动服务的命令: ./rabbitmq-server ,然后就产生了上面的报错信息,这样的报错信息主要是由于没有安装 Erlang 导致的,我采用的是homebrew来进行安装的,安装命令如下:
brew install erlang
由于homebrew会自动将Erlang的编译命令加载到全局PATH中,所以安装完成后就可以全局执行erl命令,如果是采用其他方式安装的话,别放了将安装的命令文件夹加入到PATH中
启动过程中报错: ERROR: epmd error for host xxx: address (cannot connect to host/port)
在执行启动命令:./rabbitmq-server 后,编译虽然完成,但是启动还是失败了,出现了如上所示的错误提示,通过查询得知该问题的解决方案是在系统的/etc/hosts文件中增加一条IP与主机名的映射关系,具体原因由于我也没有去深入的查看源码,了解的也不是特别清楚,所以在这里就不敢妄下断言啦,处理方案如下:
##假如原来的hosts文件如下:
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
##假如你的主机名:xxx ;修改后的hosts文件如下:
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
127.0.0.1 xxx
修改完成后然后保存,这样再去启动,刚才的这个报错应该就可以解决啦,在修改系统的hosts文件的时候,可能会碰到一个权限的问题,主要是由于hosts文件是属于系统层级的root用的,当前用户去修改可能会出现无法修改的情况,这样情况只需要如下所示:
sudo su - root
#弹出密码提示,输入你的用户登录密码即可进入root用户,这样就可以修改保存啦
erlang与rabbitmq版本不符异常:init terminating in do_boot
如果在执行rabbitmq-server命令的时候出现这样的异常信息:{“init terminating in do_boot”,{undef,[{rabbit,boot,[],[]},{init,start_em,1,[]}{init,do_boot,3,[]}]}},则表示系统中当前安装的Erlang版本与RabbitMq的版本不相符,造成了代码编译无法通过,例如我们现在安装的这个3.8.12版本的RabbitMq就需要Erlang的版本在 22.3~23.X 之间,否则就可能会出现编译异常的情况,下面罗列了几个常用的版本匹配信息,更加详细的可以通过RabbitMq的官网来查看: https://www.rabbitmq.com/which-erlang.html
rabbitmq版本 | Erlang要求最低版本 | Erlang要求最高版本 | 备注 |
---|---|---|---|
3.8.12 、3.8.11 、3.8.10 、 3.8.9 | 22.3 | 23.x | |
3.8.8 、 3.8.7 、3.8.6 、3.8.5 、3.8.4 | 21.3 | 23.x | |
3.8.3 、3.8.2 、3.8.1 、3.8.0 | 21.3 | 22.x | |
3.7.27 、3.7.26 、3.7.25 、3.7.24 、3.7.23 、3.7.22 、3.7.21 、3.7.20 、3.7.19 | 21.3 | 22.x | |
3.7.18 、3.7.17 、3.7.16 、3.7.15 | 20.3 | 22.x |
如果Erlang版本太低的话,如果原来的Erlang是通过Homebrew来安装的话,可以通过Homebrew命令来进行更新,更新命令如下:
brew upgrade erlang