Caused :org.springframework.amqp.AmqpIOException:java.io.IOException.Causedby:java.io.Exception:null

日志要点

  1. Tomcat 启动成功
2024-06-15 18:00:35.012  INFO ... Tomcat started on port(s): 8080 (http) with context path ''

嵌入式 Tomcat 服务器在端口 8080 上成功启动。

  1. 应用程序上下文初始化
2024-06-15 18:00:35.030  INFO ... Started Application in 3.51 seconds

Spring Boot 应用程序初始化成功。

  1. 尝试连接到 RabbitMQ
2024-06-15 18:00:35.039  INFO ... Attempting to connect to: [127.0.0.1:15672]

应用程序尝试连接到 上的 RabbitMQ 127.0.0.1:15672。

  1. ApplicationRunner 执行期间出错

虚拟网络

2024-06-15 18:00:40.100 ERROR ... Application run failed

java.lang.IllegalStateException: Failed to execute ApplicationRunner

这表明执行过程中出现失败ApplicationRunner。

  1. 失败的详细原因

复制代码

Caused by: org.springframework.amqp.AmqpIOException: java.io.IOException

...

Caused by: java.io.EOFException: null

根本原因是EOFExceptionRabbitMQ 连接尝试期间出现错误,表明连接意外关闭。

故障排除步骤

  1. 检查 RabbitMQ 服务器状态:确保 RabbitMQ 服务器正在运行127.0.0.1并监听预期端口。RabbitMQ 的默认端口用于5672AMQP 和15672管理插件。
sudo systemctl status rabbitmq-server
sudo systemctl status rabbitmq-server
  1. 验证 RabbitMQ 连接详细信息:确保您的应用程序配置了正确的 RabbitMQ 连接详细信息。仔细检查应用程序属性中的主机、端口、用户名和密码。
  2. 看到这我才发现:rabbitmq端口15672和5672分别是RabbitMQ管理界面和AMQP协议的默认端口。 15672端口用于Web管理界面,可以通过浏览器访问,用于查看和管理RabbitMQ的各种信息和状态。 5672端口是AMQP协议的默认端口,用于RabbitMQ客户端和服务器之间的通信,包括消息的发送和接收等操作。 在使用RabbitMQ时,需要确保这两个端口的正常开放和使用。新手需要注意这个问题。
spring.rabbitmq.host=127.0.0.1

spring.rabbitmq.port=5672

spring.rabbitmq.username=guest

spring.rabbitmq.password=guest
  1. 检查 RabbitMQ 日志:查看 RabbitMQ 服务器日志中是否存在任何可能表明连接关闭原因的错误或问题。
sudo tail -f /var/log/rabbitmq/rabbit@your_hostname.log
  1. 网络和防火墙配置:确保没有网络问题或防火墙规则阻止您的应用程序和 RabbitMQ 之间的连接。
  2. 依赖项版本:确保 Spring AMQP 和 RabbitMQ 依赖项的版本兼容。不兼容有时会导致意外的连接问题。
  3. 重试逻辑:在应用程序中实现重试逻辑以处理瞬态连接问题。Spring AMQP 提供了连接重试的配置选项。

Java 语言

@Bean

public CachingConnectionFactory connectionFactory() {

    CachingConnectionFactory factory = new CachingConnectionFactory("127.0.0.1");

    factory.setUsername("guest");

    factory.setPassword("guest");

    factory.setRequestedHeartBeat(30);  // Setting heartbeat to keep the connection alive

    factory.setConnectionTimeout(30000);  // Connection timeout in milliseconds

    return factory;

}

额外的调试

  • 启用调试日志:启用 Spring AMQP 的调试日志以获取更详细的日志。
logging.level.org.springframework.amqp=DEBUG
  • 运行 RabbitMQ 管理插件:如果还没有,请启用 RabbitMQ 管理插件来监控连接和通道。
sudo rabbitmq-plugins enable rabbitmq_management
  • 使用简单客户端进行测试:使用简单的 RabbitMQ 客户端(例如,一个小型独立脚本)来独立于应用程序测试连接。

通过遵循这些步骤,您应该能够诊断并解决 RabbitMQ 的连接问题,从而使您的 Spring Boot 应用程序成功启动。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值