禁用 Spring Cloud Bus 仍然会启动 RabbitMQ

Posted

技术标签:

【中文标题】禁用 Spring Cloud Bus 仍然会启动 RabbitMQ【英文标题】:Disabling Spring Cloud Bus still ends up starting RabbitMQ 【发布时间】:2020-11-25 21:01:58 【问题描述】:

我正在使用 Spring Boot 2.2.9.RELEASE 和 Spring Cloud Hoxton.SR7。我正在使用 Spring Cloud Bus 向 docker swarm 堆栈中的所有容器发出信号,并且当使用正在运行的 RabbitMQ 集群部署在生产环境中时,一切正常!

我正在通过 spring-cloud-starter-bus-amqp Spring Boot 启动器使用 RabbitMQ 实现。我们偶尔会在不需要总线的情况下运行测试。为此有一个弹簧启动标志:

spring.cloud.bus.enabled=false

这会禁用总线,但rabbitMQ 仍然会启动,并吐出连接被拒绝的错误。我还必须补充:

rabbitmq.autoStarting=false

我尝试过禁用 RabbitMQ 的自动配置,但似乎有一个 RabbitAutoConfiguration 类暗示它是一个 SB 自动配置类,但实际上它是一个普通的 SB 配置类。

是否有更简洁的方法来禁用云总线,同时阻止 RabbitMQ 启动?

【问题讨论】:

禁用总线并不会禁用rabbitmq binder for spring cloud stream。我不确定是否有办法通过属性来做到这一点。 好的,您能建议一种以编程方式执行此操作的方法吗?我可以添加一些我自己的条件配置。 有一个TestBinder available 似乎可以解决问题。如果我按照链接中的说明包含它,那么 rabbitMQ binder 将被忽略。我将尝试排除 autoconfig 技巧作为配置文件,因为我必须将测试绑定器携带到实际部署的 docker 容器中以运行集成测试。 是的,包括在进行“真实”生产部署(RabbitMQ 可用)时触发的自动配置排除。我有点喜欢这样,我可以只使用 SpringBoot 配置来实现我的目标,这要感谢 TestBinder 【参考方案1】:

您只需要将 spring-cloud-stream-test-support jar 包含在您的测试范围中。此 jar 包含将覆盖和替换默认活页夹的活页夹。这些测试绑定器实际上不会连接到后台的资源。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-stream-test-support</artifactId>
    <version>$spring.cloud.stream.version</version>
    <scope>test</scope>
</dependency>

【讨论】:

以上是关于禁用 Spring Cloud Bus 仍然会启动 RabbitMQ的主要内容,如果未能解决你的问题,请参考以下文章

在 Spring Cloud Config Client 中启用 /bus/refresh 端点

Spring Cloud Bus with rabbit - 应用程序无法启动

Spring Cloud学习记录 08Spring Cloud Bus服务总线

Spring Cloud Bus 消息总线

(记录)整合spring cloud bus+rabbitmq后,config server/client启动报错及解决方式

通过总线机制实现自动刷新客户端配置(Consul,Spring Cloud Config,Spring Cloud Bus)