Java集成RabbitMQ频繁遇Connection reset连接驱动错误求助
问题概述
集成RabbitMQ的Java项目运行时频繁抛出以下错误:
c.r.c.impl.ForgivingExceptionHandler: An unexpected connection driver error occurred (Exception message: Connection reset)
环境配置:
- Java 11
- RabbitMQ 3.11.16
- Erlang 26.0
已确认端口5672处于监听状态,防火墙未拦截端口或应用,但连接localhost:5672时仍频繁出现连接重置。
日志与截图信息
RabbitMQ服务日志
accepting AMQP connection <0.28225.0> (127.0.0.1:61937 -> 127.0.0.1:5672)
2023-05-25 13:55:51.840000+05:30 [info] <0.28225.0> connection <0.28225.0> (127.0.0.1:61937 -> 127.0.0.1:5672) has a client-provided name: connectionFactory#64ae105d:3
2023-05-25 13:55:51.841000+05:30 [info] <0.28225.0> connection <0.28225.0> (127.0.0.1:61937 -> 127.0.0.1:5672 - connectionFactory#64ae105d:3): user 'guest' authenticated and granted access to vhost 'blr'
2023-05-25 13:55:51.842000+05:30 [error] <0.28225.0> crasher:
2023-05-25 13:55:51.842000+05:30 [error] <0.28225.0> initial call: rabbit_reader:init/3
2023-05-25 13:55:51.842000+05:30 [error] <0.28225.0> pid: <0.28225.0>
2023-05-25 13:55:51.842000+05:30 [error] <0.28225.0> registered_name: []
2023-05-25 13:55:51.842000+05:30 [error] <0.28225.0> exception exit: {unexpected_message,{'EXIT',#Port<0.7023>,einval}}
2023-05-25 13:55:51.842000+05:30 [error] <0.28225.0> in function rabbit_reader:handle_other/2 (rabbit_reader.erl, line 644)
2023-05-25 13:55:51.842000+05:30 [error] <0.28225.0> in call from rabbit_reader:mainloop/4 (rabbit_reader.erl, line 535)
2023-05-25 13:55:51.842000+05:30 [error] <0.28225.0> in call from rabbit_reader:run/1 (rabbit_reader.erl, line 457)
2023-05-25 13:55:51.842000+05:30 [error] <0.28225.0> in call from rabbit_reader:start_connection/5 (rabbit_reader.erl, line 356)
2023-05-25 13:55:51.842000+05:30 [error] <0.28225.0> ancestors: [<0.28223.0>,<0.673.0>,<0.672.0>,<0.671.0>,<0.669.0>,
2023-05-25 13:55:51.842000+05:30 [error] <0.28225.0> <0.668.0>,rabbit_sup,<0.233.0>]
2023-05-25 13:55:51.842000+05:30 [error] <0.28225.0> message_queue_len: 0
2023-05-25 13:55:51.842000+05:30 [error] <0.28225.0> messages: []
相关截图
- RabbitMQ状态截图:

- Eclipse控制台输出截图:

解决步骤
1. 修复Erlang与RabbitMQ版本兼容性问题
RabbitMQ 3.11.16不兼容Erlang 26.0,官方明确标注3.11.x版本仅支持Erlang 24.3.4.8至25.x版本。Erlang 26的底层网络模块变更会导致RabbitMQ的连接处理进程抛出einval错误,直接引发连接重置。
操作步骤:
- 卸载当前Erlang 26.0
- 下载并安装Erlang 25.3.x版本(推荐稳定版)
- 重启RabbitMQ服务
2. 确认客户端连接配置正确性
- 检查虚拟主机
blr是否存在,且guest用户拥有该虚拟主机的读写权限 - 为连接工厂设置合理的超时参数,避免因超时导致连接被主动关闭,示例代码(Spring Boot环境):
@Bean public ConnectionFactory connectionFactory() { CachingConnectionFactory factory = new CachingConnectionFactory("localhost", 5672); factory.setUsername("guest"); factory.setPassword("guest"); factory.setVirtualHost("blr"); factory.setConnectionTimeout(30000); // 设置30秒连接超时 return factory; }
3. 验证RabbitMQ服务状态
执行以下命令确认服务运行正常:
rabbitmqctl status
确保输出中无异常报错,且5672端口监听正常。
内容的提问来源于stack exchange,提问作者Yashika Rajput

