Дополнительный профиль: нет подходящего компонента типа 'org.springframework.boot.autoconfigure.kafka.KafkaProperties' [Spring Cloud Stream Kafka] - PullRequest
0 голосов
/ 18 июня 2019

У меня есть Spring Cloud Stream, материализованный в GlobalKTable. Для локальной среды разработки это обычный текст без настройки безопасности.

@EnableBinding(CacheBinding.class)
public class ItemCacher {
    @StreamListener
    void materialize(@Input(CacheBinding.ITEMS) GlobalKTable<String, Item> items) {}
}

interface CacheBinding {
    String ITEMS = "cache";
    @Input(ITEMS) GlobalKTable<String, Item> cache();
}

@Data class Item {
    private String key;
    private String value;
}

@Data class ItemList {
    private List<Item> items;
}

public class SampleSerdes {
    public static class ItemSerde extends JsonSerde<Item> {}
    public static final Serde<Item> POSITION_SERDE = new ItemSerde();
}

application.yaml:

spring.cloud.stream:
  bindings.cache:
    destination: items-topic
    binder: cache
    group: cache-group
  kafka.streams:
    binder:
      application-id: splitter
      brokers: localhost:9092
      configuration.default:
        key.serde: org.apache.kafka.common.serialization.Serdes$StringSerde
        value.serde: com.example.minfail.SampleSerdes$ItemSerde
    bindings:
      cache.consumer:
        applicationId: cache
        materializedAs: items-cache
  binders.cache.type: ktable

Однако для развертывания в тестовой системе темы Kafka защищены с помощью Kerberos, поэтому я добавил это в другом профиле:

application-kerberos.yaml:

spring.cloud.stream:
  kafka.binder.configuration:
    security.protocol: SASL_SSL
    sasl.kerberos.service.name: kafka
    jaas:
      loginModule: com.sun.security.auth.module.Krb5LoginModule
      options:
        useKeytab: true
        storeKey: true
  binders.cache.environment.spring.cloud.stream.kafka.streams.binder.configuration.jaas.options:
    keyTab: cache_keytab
    principal: cache_principal

Теперь, когда я запускаю приложение с -Dspring.profiles.active=kerberos, я получаю сообщение

Вызвано: org.springframework.beans.factory.NoSuchBeanDefinitionException: нет доступного квалифицирующего компонента типа 'org.springframework.boot.autoconfigure.kafka.KafkaProperties': ожидается, что по крайней мере 1 компонент будет квалифицирован как кандидат для автоматической передачи. Аннотации зависимостей: {}

Я нашел эту проблему (к которой я также добавил комментарий), но, похоже, ее следует решить.

Я использую Spring Boot 2.1.5.RELEASE, версию Spring Cloud Greenwich.SR1 и версию Cloud Stream Fishtown.RELEASE.

Я что-то упускаю из виду или все еще использую неправильную версию? Есть ли обходной путь?

...