.NET 操作 RabbitMQ 踩坑记录

由于项目需要,准备使用消息队列,经过一番筛选,最终选定 RabbitMQ,它的性能虽然没有 Kafka 那强大,但它更可靠、稳定,而且有官方提供的 nuget 包,感觉更适合 .NET,更适合我们的使用场景。

查了一些资料,发现在 Windows 环境中安装还挺麻烦的,还要分别安装 ErLang 和 RabbitMQ,还要配置环境变量,总之比较麻烦。试了一下在 WSL / Debian 中 apt install  rabbitmq-server,一键安装省了不少事,进了它的 Web 控制台,各种操作一切正常!感觉很顺利,还有点小激动。

于是创建个控制的测试项目,尝试代码操作 RabbitMQ 体验一下,接下来正式入坑!完全按照示例代码写的服务参数信息,确认没有错误,代码编译也没有任何错误和警告,就是运行过程中报错“None of the specified endpoints were reachable”,上网搜了一下类似问题的解决方案,有说是连接服务参数不正确的,有说是SSL问题的,有说是类库引用不正确的,说是把所有的nuget引用都移除了,再添加一遍就好了,看着都觉得不靠谱,总之各种方案都试了,就是解决不了,浪费了两三个小时的宝贵时间!为了不让再遇到相关问题的朋友被那些无用的信息困扰,特在此分享问题的解决方案。

最终是在另一台电脑的WSL环境中安装了 RabbitMQ,然后用示例代码连接操作竟然一切正常!两台电脑的系统环境基本相同,并无太大的差别。经过仔细对比后,在 rabbitmqctl status 输出的信息中发现了关键的区别!正常的那台,端口信息是“Interface: 127.0.0.1, port: 5672……”;而异常的那台,端口信息是“Interface: [::], port: 5672……”,应该是把服务只绑定到 IPv6 上了,尝试修改配置文件 /etc/rabbitmq/rabbitmq-env.conf 中的 NODE_IP_ADDRESS 为 0.0.0.0 或 127.0.0.1 后,测试程序均可以正常工作,真是奇葩的问题!RabbitMQ 的报错信息也够误导人的!

至此,问题总算解决。初识 RabbitMQ 就被当头一棒,以后还不知有多少坑等着要踩,只求码神保佑了!

顺便多说一句,RabbitMQ的数据目录位置是在 /var/lib/rabbitmq/mnesia 或 /usr/local/rabbitmq/mnesia,卸载软件并不会删除这个数据目录,重新安装的话,之前创建的用户等数据都还在,这是一个数百MB的目录,如果彻底不打算使用 RabbitMQ 了,需要手动删除,以释放空间。

posted @ 2023-11-18 22:15  润之  阅读(46)  评论(0编辑  收藏  举报