RabbitMQ 的安装与卸载 以及各种踩坑
当前编写文档时间:2019年4月23日17:42:07
安装 -- windows
-
RabbitMQ依赖于Erlang虚拟机,所以要先安装Erlang,自行官网下载。RabbitMQ download 以及 Erlang官网
- 29 March 2019 更新版本:RabbitMQ 3.7.14 release (后来因为出现了问题,改为3.6.5)
- This release requires Erlang/OTP 20.3.
- 关于安装那种方式,都差不多,建议使用 Installer。
关于选用那个版本的Erlang以支持RabbitMQ(注:必须按要求,否则有问题)
下载完,以管理员身份运行,先安装Erlang,安装后配置环境变量(检查一下,有可能不自动写)。(ERLANG_HOME=C:\Program Files\erl10.1))以及path加上bin。
安装Erlang后安装RabbitMQ,默认TCP端口5672,安装直接启动的。
安装RabbitMQ后依旧设置环境变量。(RABBITMQ_HOME=安装路径)。 path加上sbin。
CMD运行
rabbitmqctl status
检测是否安装成功运行
rabbitmq-plugins enable rabbitmq_management
打开RabbitMQ管理插件插件运行成功,就可以在WEB管理界面看到RabbitMQ相关信息。本地地址,默认账户(guest:guest)
-
RabbitMQ配置文件所在位置(3.6.5版本再Web管理页面能看到,但是3.7.14在页面就没有)
- 在etc/下存在两个文件rabbitmq.config.example和README.txt,从名字看出,第一个就是config的example
- 但是!!!这个位置的配置文件只是给你看的,并不是真的在这,README.txt中说了:
In this directory you can find an example configuration file for RabbitMQ.
Note that this directory is not where the real RabbitMQ
configuration lives. The default location for the real configuration
file is %APPDATA%\RabbitMQ\rabbitmq.config.%APPDATA% usually expands to C:\Users%USERNAME%\AppData\Roaming or similar.
- 修改配置文件后重启服务即可
- 重启服务有文档说需要管理员身份,我一直是管理员身份,没验证。
- 有的文档上写着需要重新安装才会生效,我不知道为什么有这种说法,没发现需要。
- 重启命令:rabbitmq-service.bat 里先stop在start ,不知道为什么没有restart。
卸载 -- windows
- 打开“程序和功能”。(命令:appwiz.cpl)
- 在列表中卸载RabbitMQ和Erlang
- 打开Windows任务管理器。
- 在任务管理器中,查找进程epmd.exe。|| 或者在资源管理器中
- 删除RabbitMQ和Erlang的所有安装目录。
- 删除文件C:\ Windows \ .erlang.cookie(如果存在)。
- 转到用户文件夹:C:\ Users \ [username],然后删除文件.erlang.cookie。删除
- 同样在User文件夹中,转到AppData \ Roaming \ RabbitMQ。删除RabbitMQ文件夹。
- 删除RabbitMQ的服务。sc delete RabbitMQ
- 注册表删除RabbitMQ节点(命令:regedit) (HLM-SOFTWARE-Ericesson---)
遇见的坑
问题1:SSL通讯出现问题(rabbitmq-server-3.7.14 && otp_win64_21.3):
Received fatal alert: handshake_failure
解决方案:
第一种:
因为jdk中jce的安全机制导致报的错,要去oracle官网下载对应的jce包替换jdk中的jce包。
jce所在地址: %JAVA_HOME%\jre\lib\security里的local_policy.jar,US_export_policy.jar
JDK8 http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
第二种:
在请求连接之前加上
System.setProperty("https.protocols", "TLSv1.2,TLSv1.1,SSLv3");
问题2:SSL通讯出现问题(rabbitmq-server-3.7.14 && Erlang21.3)(rabbitmq-server-3.6.1 && Erlang18.3.3):
console报出:
javax.net.ssl.SSLHandshakeException: Received fatal alert: insufficient_security
log报出:
=ERROR REPORT==== 22-Apr-2019::03:19:02 ===
SSL: hello: tls_handshake.erl:167:Fatal error: insufficient security
TLS server: In state hello at tls_handshake.erl:201 generated SERVER ALERT: Fatal - Insufficient Security - no_suitable_ciphers
解决方案:
上述两种RabbitMQ和Erlang的配合都报这个问题,
新版的未找到什么问题。估计是因为最新版本问题bug。卸载
3.6.1的是因为与Erlang18.3.3的版本出现的bug,18.3.4中修复,Stack Overflow上回答说推荐升级至19.X。
安装常见的稳定版本(rabbitmq-server-3.6.5 && Erlang19.3)
删除新版本,重装版本
问题3:卸载时报占用却找不到
卸载时,在任务管理器中,找不到epmd.exe的进程,但是删除目录中的文件时,却提示被占用
解决方案:
任务管理器 - 性能 - 打开资源监视器,在资源监视器中找到epmd,右键 - 结束进程,问题解决
问题4:安装运行RabbitMQ,报“init terminating in do_boot ()”
解决方案:
RabbitMQ版本与Erlang版本不符,安装失败的,看注册表就知道没安装成功。
问题5:安装RabbitMQ时,查看安装的详细信息,出现异常,导致服务无法启动
解决方案:
注册表写入失败,需要手动写入重新安装,有可能是 版本问题、环境问题、安装权限问题。
依次执行命令:rabbitmq-service stop,rabbitmq-service remove,rabbitmq-service install,rabbitmq-service start,卸载并重新安装RabbitMQ的服务
问题6:安装RabbitMQ时,出现异常
unable to connect to node 'rabbit@2012-R2-Datacenter-64bit': nodedown”
解决方案:
C:\Windows.erlang.cookie和C:\Users[username].erlang.cookie的口令不一致导致的
删除其一,将另外一个复制过来就可以了
或者都删除重新安装。
问题7:安装运行RabbitMQ,报“init terminating in do_boot ()”
解决方案:
我出现的原因是RabbitMQ版本与Erlang版本不符,安装失败的,看注册表就知道没安装成功。
问题8:安装过程出现乱码诡异错误
解决方案:
怀疑是因为目录路径空格导致,换了名字好了。
问题9:安装好之后,创建了账号,但是使用过程中,依然提示权限不足
解决方案:
账号没有分配权限,WEB页面分配权限即可
问题10:重新安装后,出现SSL通信错误
=ERROR REPORT==== 23-Apr-2019::16:13:04 ===
SSL: certify: ssl_handshake.erl:1609:Fatal error: certificate expired
=ERROR REPORT==== 23-Apr-2019::16:22:21 ===
SSL: certify: ssl_handshake.erl:1609:Fatal error: certificate expired
解决方案:
报的异常是证书过期:但是也有可能是因为证书还没到时间
我是在linux里生成的证书,linux时间与windows时间不一致导致。
设置系统时间与网络时间同步
ntpdate cn.pool.ntp.org
将系统时间写入硬件时间
hwclock --systohc
问题11:正常使用,日志记录增长过快
解决方案:
因为rabbitMQ日志默认记录级别是Info,会记录所有进出栈信息,导致日志过大,只需要将配置文件的日志级别设置为error或者warning
[
{rabbit, [
{vm_memory_high_watermark_paging_ratio, 0.4},
{vm_memory_high_watermark, 0.4},
{log_levels, [{connection, warning}, {channel, warning}]}
]
}
].
问题12:业务量变大,CPU暴增
解决方案:
这是一个复杂的多种可能性的问题,先一种种走过去:
第一种:可能是因为每次连接都是创建一个连接对象,又没有及时释放导致的,可以对channel进行限制。
待续。