环境
云服务器使用docker容器来运行rabbitmq
Spring Boot 2.3.7.RELEASE
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>
application.yml
# 应用服务 WEB 访问端口
server:
port: 8004
# 应用名称
spring:
application:
name: demo-10-stream-rabbitmq-provider
cloud:
stream:
binders:
defaultRabbit:
type: rabbit
environment:
spring:
rabbitmq:
host: 120.37.100.249
# 默认是5672,但我进行了端口映射
port: 5676
username: zg
password: password
bindings:
output:
destination: studyExchange
content-type: application/json
binder: defaultRabbit
使用该配置后的异常信息

控制台日志

第一次试图连接访问的就是application.yml中配置的地址(121.37.199.247:5676),此时已经连接成功;
但是程序还会在之后进行第二次连接(进行健康检查时),此时访问的地址就是localhost:5672。但在我本地环境中并没有安装rabbitmq环境,所以直接报IOException。

解决方法:
配置 spring.rabbitmq ,而不使用默认的。
# 应用服务 WEB 访问端口
server:
port: 8004
# 应用名称
spring:
application:
name: demo-10-stream-rabbitmq-provider
rabbitmq:
host: 120.37.100.249
port: 5676
username: zg
password: password
cloud:
stream:
binders:
defaultRabbit:
type: rabbit
bindings:
output:
destination: studyExchange
content-type: application/json
binder: defaultRabbit
本文介绍了在SpringBoot 2.3.7.RELEASE项目中,使用Docker容器运行RabbitMQ时遇到的连接异常问题。问题在于程序在启动后尝试两次连接RabbitMQ,第一次使用了正确的配置,而第二次则尝试连接到本地的5672端口。通过分析日志发现,第二次连接是健康检查导致的。为解决此问题,调整了`application.yml`配置,将RabbitMQ的相关配置移出`cloud.stream.binders`,直接在`spring.rabbitmq`下配置,确保程序只使用正确的远程服务器地址。这样避免了因健康检查导致的异常,实现了稳定连接。
1107

被折叠的 条评论
为什么被折叠?



