Spring Cloud 2020.0.0 中的 Spring Cloud 总线/流问题

问题描述 投票:0回答:2

我们有一个 Spring Boot 微服务,它不仅有 HTTP 端点,还使用 Spring Cloud Bus 来获取刷新事件(来自 Rabbit),并且还有一个 Spring Cloud Stream Sink,可以从另一个 Rabbit 主题中获取自定义消息。

更新到 Spring Boot 2.4.1 和 Spring Cloud 2020.0.0 后,一切似乎都正常,直到我们发现 Spring Cloud Bus 不再接收事件。 调查发现,一些 Spring Cloud Bus 内部通道没有被创建。

这在另一个没有流功能的服务中没有发生,因此我们测试了禁用该功能,然后总线功能开始工作。 所以这显然是旧式流模型和较新的 Spring Cloud Bus 之间的某种干扰。

更新我们的接收器以使用新的功能模型后,我仍然遇到问题,并最终通过在我们的 application.yml 中包含以下几行来使两者都能工作:

spring:
  cloud:
    stream:
      bindings.mySink-in-0.destination: mytopic
      function.definition: busConsumer;mySink

所以我有以下问题

  1. 我是否错过了什么,或者是否应该有更好的文档来说明流/总线如何相互影响以及迁移到 2020.0.0?
  2. 我当前的配置看起来正确吗?
  3. 在这里包含busConsumer似乎是不对的 - 它的自动配置是否应该无法将其与任何其他流配置“组合”?
  4. spring.cloud.stream.function.definition
    spring.cloud.function.definition
    有什么区别?我在文档中都看到过,Spring Cloud Bus 似乎也在设置
    spring.cloud.function.definition=busConsumer
spring-cloud spring-cloud-stream spring-cloud-function spring-cloud-bus
2个回答
1
投票

org.springframework.cloud.stream.function.FunctionConfiguration
中,它会搜索
@EnableBinding

if (ObjectUtils.isEmpty(applicationContext.getBeanNamesForAnnotation(EnableBinding.class)))

如果找到,功能绑定将被禁用。看这个

logger.info("Functional binding is disabled due to the presense of @EnableBinding annotation in your configuration");

升级后,我们需要将监听器类转换为使用函数式接口,以激活函数式绑定。之后,云总线消费者绑定也会被创建。


0
投票

Spring Cloud Bus 的 BusAutoConfiguration 从 3.0.0 版本开始弃用了 @EnableBinding 注解,解决了 Function 支持的问题。 可以考虑单独升级SpringCloudBus版本。

© www.soinside.com 2019 - 2024. All rights reserved.