Windows环境下RabbitMQ安装报错

本文详细阐述了在安装RabbitMQ时遇到的中文路径异常和版本不符问题,提供了解决方案,包括修改用户名、调整数据文件路径和环境变量设置。重点介绍了如何避免中文路径错误并确保RabbitMQ与Erlang版本匹配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现实情况

报错如下

在这里插入图片描述

解决如下

// 移除服务 
rabbitmq-service.bat remove
// 变更数据所在的文件位置,不包含中文
set RABBITMQ_BASE=F:\developApp\ruanjian\RabbitMQ Server\rabbitmq_server-3.8.35\data
rabbitmq-service.bat install
rabbitmq-plugins enable rabbitmq_management

//运行
rabbitmq-server.bat
或者
rabbitmqctl start_app

1 中文路径异常

1 安装时出现的问题

安装之后,打开安装目录的 sbin 目录 RabbitMQ Server\rabbitmq_server-3.8.35\sbin,打开 cmd,执行命令

rabbitmqctl status 或者 rabbitmqctl start_app

出现以下问题:

** (ArgumentError) argument error
    (stdlib) io_lib.erl:187: :io_lib.format(' * effective user\'s home directory: ~s~n', [[67, 58, 92, 85, 115, 101, 114, 115, 92, 29579, 30427]])
    src/rabbit_misc.erl:719: :rabbit_misc."-format_many/1-lc$^0/1-0-"/1
    src/rabbit_misc.erl:719: :rabbit_misc."-format_many/1-lc$^0/1-0-"/1
    src/rabbit_misc.erl:719: :rabbit_misc.format_many/1
    (rabbitmqctl) lib/rabbitmqctl.ex:553: RabbitMQCtl.get_node_diagnostics/1
    (rabbitmqctl) lib/rabbitmqctl.ex:409: RabbitMQCtl.format_error/3
    (rabbitmqctl) lib/rabbitmqctl.ex:584: RabbitMQCtl.maybe_with_distribution/3
    (rabbitmqctl) lib/rabbitmqctl.ex:93: RabbitMQCtl.exec_command/2

:badarg

或者执行 rabbitmq-server.bat 出现以下问题:

BOOT FAILED
===========
Error during startup: {error,
                       {rabbitmq_management_agent,
                        {{shutdown,
                          {failed_to_start_child,rabbit_mgmt_agent_sup,
                           {shutdown,
                            {failed_to_start_child,
.....

2 原因

原因一:安装路径中不能带有中文和空格

原因二:
RabbitMQ默认的数据文件位置在 C:\Users\用户名AppData\Roaming\RabbitMQ
若安装路径无问题,那么有可能是因为数据文件路径中 用户名 为中文导致的

3 解决思路(这个有效)

直接修改计算机的用户名:
参考 Win10如何更改C:\Users\下的用户名

用户名修改过于麻烦,尝试通过修改 RabbitMQ 的默认数据文件路径解决:

下面命令一条一条执行

// 移除服务 
rabbitmq-service.bat remove    
// 变更数据所在的文件位置,不包含中文
set RABBITMQ_BASE=G:\6CodingSoftware\RabbitMQ\rabbitmq_server-3.8.9\data
rabbitmq-service.bat install
rabbitmq-plugins enable rabbitmq_management
rabbitmqctl start_app  或者 rabbitmq-server.bat

在这里插入图片描述

在这里插入图片描述

在data文件夹下出现以下的内容就说明设置成功

在这里插入图片描述

上述情况没有根本解决问题。因为每次启动都需要重复运行上面的命令

如果直接执行 rabbitmq-server.bat 还是原来默认的数据文件路径,而不是修改之后的,并且会报错

在这里插入图片描述

所以需要 修改 rabbitmq-env.bat 文件,设置默认的数据文件路径

(我设置默认的数据文件路径没有用,如果嫌一条一条命令执行比较麻烦,可以编写 bat 文件,内容如下:)

start cmd /k "cd /d F:\developApp\ruanjian\RabbitMQ Server\rabbitmq_server-3.8.35\sbin 
& rabbitmq-service.bat remove 
& set RABBITMQ_BASE=F:\xxx\RabbitMQ Server\rabbitmq_server-3.8.35\data
& rabbitmq-service.bat install 
& rabbitmq-plugins enable rabbitmq_management 
& rabbitmq-server.bat"

注意 rabbitmq_server-3.8.35\data& 之间不可以有空格,否则识别路径报错

4 解决方法(我设置无效)

修改 rabbitmq-env.bat 文件,设置默认的数据文件路径

在这里插入图片描述


set ERL_PATH=
set ERL_DIRNAME=
后插入 set RABBITMQ_BASE=!RABBITMQ_HOME!/data

然后执行命令

rabbitmq-service.bat remove
rabbitmq-service.bat install
rabbitmq-plugins enable rabbitmq_management
rabbitmq-server

之后启动 RabbitMQ ,只需要直接运行 rabbitmq-server.bat

2 版本不符异常

若出现以下报错,有可能是 erlang 与 rabbitmq 版本不符异常

{"init terminating in do_boot",{error,{rabbitmq_management_agent,{{
[{error_info,#{module=>erl_erts_errors}}]},{rabbit_mgmt_external_stats,'-i/2-lc$^0/1-0-',1,[{file,"src/rabbit_mgmt_external_stats.erl"}

在这里插入图片描述

更加详细的可以通过 RabbitMq 的官网来查看: https://www.rabbitmq.com/which-erlang.html

3 找不到ERLANG_HOME

报错如下:
ERLANG_HOME not set correctly

解决方法一

编辑 rabbitmq_server.bat 文件

在这里插入图片描述

直接改成了绝对路径 :

"D:\Program Files\erl9.3\bin\erl.exe" 

解决方法二

如果觉得不应该更改安装源自身的代码

增加环境变量

ERLANG_HOME=D:\Program Files\erl9.3

这里的目录是我的安装目录,你要换成自己的目录

修改环境变量Path,在原来的值后面加上

%ERLANG_HOME%\bin

打开cmd,输入 erl 能正常显示版本即成功加入系统环境中

在这里插入图片描述
配置后电脑需要重启

然后重新执行 rabbitmq-plugins enable rabbitmq_management

### .NET RabbitMQ 单元测试报错解决方案 在进行 .NET 中的 RabbitMQ 单位测试时,可能会遇到多种类型的错误。这些错误通常涉及连接问题、配置不当或者框架本身的限制。以下是针对可能发生的错误及其解决方案的分析。 #### 1. 连接失败 如果单元测试尝试通过本地或远程服务器建立 RabbitMQ 的连接而失败,则可能是由于以下原因: - **网络不可达**:确保 RabbitMQ 服务正在运行,并且可以通过指定的 IP 地址和端口访问。 - **认证问题**:确认用户名和密码是否正确[^1]。 对于这种情况,可以考虑使用内存中的模拟器来替代实际的 RabbitMQ 实例。例如,`EasyNetQ` 提供了一个 `InMemoryBus` 来支持这种需求。 ```csharp var bus = RabbitHutch.CreateBus("host=localhost"); bus.Advanced.Bus.Publish(new Message()); ``` #### 2. 消息丢失验证 当需要验证消息是否成功传递到队列时,可利用 RabbitMQ 的 Confirm 和 Return 功能。生产者应实现回调函数以捕获消息状态变化的信息[^2]。 ```csharp public class MyConfirmCallback : IConfirmCallback { public void HandleBasicAck(ulong deliveryTag, bool multiple) { Console.WriteLine($"Message with tag {deliveryTag} was confirmed."); } public void HandleBasicNack(ulong deliveryTag, bool multiple, bool requeue) { Console.WriteLine($"Message with tag {deliveryTag} was not acknowledged."); } } ``` #### 3. 死信队列处理 为了测试死信队列的行为,在创建队列时需设定相应的参数以便于超时或其他条件触发后能够自动转发至目标队列[^5]。 ```csharp Dictionary<string, object> args = new Dictionary<string, object>(); args.Add("x-dead-letter-exchange", deadLetterExchange); args.Add("x-message-ttl", ttlMilliseconds); channel.QueueDeclare(queue: normalQueueName, durable: true, exclusive: false, autoDelete: false, arguments: args); ``` #### 4. Erlang/C++依赖冲突 某些情况下,尤其是在 Windows 平台上安装 RabbitMQ Server 可能会因为 Erlang 版本兼容性而导致异常行为发生[^4]。建议按照官方文档推荐的方式重新部署环境并保持组件间的一致性。 --- ### 示例代码片段 下面展示了一种简单的基于 Moq 库的方法来进行 RabbitMQ 发布订阅模式的功能性仿真测试。 ```csharp [TestClass] public class RabbitMqTests { private Mock<IRabbitMqPersistentConnection> _mockedConnection; [TestInitialize] public void Initialize() { _mockedConnection = new Mock<IRabbitMqPersistentConnection>(); // Arrange mock behavior here... } [TestMethod] public void Publish_ShouldCallChannelBasicPublishOnce() { var modelMock = new Mock<IModel>(); _mockedConnection.Setup(x => x.CreateModel()).Returns(modelMock.Object); var publisher = new Publisher(_mockedConnection.Object); publisher.Publish("test"); modelMock.Verify(m => m.BasicPublish(It.IsAny<string>(), It.IsAny<string>(), null, Encoding.UTF8.GetBytes("test")), Times.Once); } } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值