【问题标题】:Spring Cloud Stream + Google Pub/Sub:函数绑定不起作用
【发布时间】:2020-08-21 18:12:18
【问题描述】:

我正在尝试在同一应用程序中使用来自不同 PubSub 主题的多条消息。其中一个是轮询的,其他的应该是功能绑定。我的功能消费者不起作用。

@Bean
public Consumer<MessageA> messageAMessageHandler() {
    return message -> { ... }
}

@Scheduled(initialDelay = 60 * 1000, fixedRate = 600 * 1000)
public void pollBMessages() {
    this.bMessageSource.b().poll(m -> { ... }, new ParameterizedTypeReference<MessageB>() {
    });
}

我的应用程序.yml:

spring:
  cloud:

    stream:
      pubsub:
        default:
          consumer:
            auto-create-resources: true

      gcp:
        pubsub:
          bindings:
            message-a-input:
              consumer:
                ack-mode: manual

      bindings:
        messageAMessageHandler-in-0:
          destination: message-b-topic
          group: my-service
        message-a-input:
          destination: message-a-topic
          group: my-service

    function:
      definition: messageAMessageHandler;messageCMessageHandler

轮询基于注解的 MessageSource 效果很好,但没有拾取功能绑定。它们是我的应用程序上下文中的 Bean,但云流或 gcp pubsub 会忽略它们。不创建订阅,也不消耗任何消息。

我错过了什么?

【问题讨论】:

    标签: spring-cloud-stream google-cloud-pubsub spring-cloud-gcp


    【解决方案1】:

    由于您的轮询活页夹正在工作,您的代码中可能有 @EnabledBinding 注释。如果您查看应用程序输出,您将看到如下消息:

    onConfiguration$FunctionBindingRegistrar : Functional binding is disabled due to the presense of @EnableBinding annotation in your configuration.
    

    Spring Cloud Stream 不支持混合遗留(基于注解)和功能绑定样式。

    【讨论】:

    • 谢谢。由于日志级别配置错误,我没有看到该日志消息。我是否正确地假设,因为没有功能性的方式来轮询消息,我必须将我的消费者更改为遗留/注释方法?
    • 好吧,你可以把它颠倒过来,让你的消费者成为 生产者 -- autowire PubSubTemplate(这是一个低级的、非 SCS 特定的对象用于与 Cloud Pub/Sub 交互)并直接使用其pull() 方法之一。但在 Spring Cloud Stream gitter 或问题跟踪器上提出一个有趣的问题——轮询消费者在新功能模型中是否有任何作用。
    猜你喜欢
    • 2022-01-13
    • 2019-07-08
    • 2019-07-07
    • 2021-12-12
    • 1970-01-01
    • 2016-11-30
    • 2021-06-18
    • 2021-02-21
    • 2021-08-16
    相关资源
    最近更新 更多