日志要点
- Tomcat 启动成功:
2024-06-15 18:00:35.012 INFO ... Tomcat started on port(s): 8080 (http) with context path ''
嵌入式 Tomcat 服务器在端口 8080 上成功启动。
- 应用程序上下文初始化:
2024-06-15 18:00:35.030 INFO ... Started Application in 3.51 seconds
Spring Boot 应用程序初始化成功。
- 尝试连接到 RabbitMQ:
2024-06-15 18:00:35.039 INFO ... Attempting to connect to: [127.0.0.1:15672]
应用程序尝试连接到 上的 RabbitMQ 127.0.0.1:15672。
- ApplicationRunner 执行期间出错:
虚拟网络
2024-06-15 18:00:40.100 ERROR ... Application run failed
java.lang.IllegalStateException: Failed to execute ApplicationRunner
这表明执行过程中出现失败ApplicationRunner。
- 失败的详细原因:
复制代码
Caused by: org.springframework.amqp.AmqpIOException: java.io.IOException
...
Caused by: java.io.EOFException: null
根本原因是EOFExceptionRabbitMQ 连接尝试期间出现错误,表明连接意外关闭。
故障排除步骤
- 检查 RabbitMQ 服务器状态:确保 RabbitMQ 服务器正在运行127.0.0.1并监听预期端口。RabbitMQ 的默认端口用于5672AMQP 和15672管理插件。
sudo systemctl status rabbitmq-server
sudo systemctl status rabbitmq-server
- 验证 RabbitMQ 连接详细信息:确保您的应用程序配置了正确的 RabbitMQ 连接详细信息。仔细检查应用程序属性中的主机、端口、用户名和密码。
- 看到这我才发现: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
- 检查 RabbitMQ 日志:查看 RabbitMQ 服务器日志中是否存在任何可能表明连接关闭原因的错误或问题。
sudo tail -f /var/log/rabbitmq/rabbit@your_hostname.log
- 网络和防火墙配置:确保没有网络问题或防火墙规则阻止您的应用程序和 RabbitMQ 之间的连接。
- 依赖项版本:确保 Spring AMQP 和 RabbitMQ 依赖项的版本兼容。不兼容有时会导致意外的连接问题。
- 重试逻辑:在应用程序中实现重试逻辑以处理瞬态连接问题。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 应用程序成功启动。