Spring Cloud Stream + Google Pub / Sup: функциональная привязка не работает - PullRequest
1 голос
/ 06 мая 2020

Я пытаюсь использовать несколько сообщений из разных тем 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>() {
    });
}

My application.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 на основе аннотаций работает хорошо, но функциональные привязки не поддерживаются. В контексте моего приложения это Beans, но облачный поток или gcp pubsub игнорирует их. подписки не создаются и сообщения не используются.

Что мне не хватает?

1 Ответ

3 голосов
/ 06 мая 2020

Поскольку привязка с опросом работает, вероятно, где-то в вашем коде есть аннотация @EnabledBinding. Если вы посмотрите на вывод приложения, вы увидите такое сообщение:

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

Spring Cloud Stream не поддерживает смешивание устаревших (на основе аннотаций) и функциональных стилей привязки.

...