Так как это мое первое приложение, в котором я использую реестр схем, поэтому я немного смущен @EnableSchemaRegistryClient, поскольку, когда я удаляю эту аннотацию из своего основного класса, мой производитель все еще взаимодействует с реестром схемы и автоматически публикует схему и мой потребитель также отлично работает с получением схемы правильно с именем субъекта Итак, что делают @EnableSchemaRegistryClient и @EnableSchemaRegistryServer?
Я использую изображение confluentinc / cp-schema-registry docker для реестра схемы и io. confluent.kafka.serializers.KafkaAvroSerializer и io.confluent.kafka.serializers.KafkaAvroDeserializer для сериализации и де-сериализации
это мой application.yml производителя
spring:
cloud:
stream:
default:
producer:
useNativeEncoding: true
bindings:
output:
destination: inventory
content-type: application/*+avro
kafka:
binder:
producer-properties:
key.serializer: org.apache.kafka.common.serialization.StringSerializer
value.serializer: io.confluent.kafka.serializers.KafkaAvroSerializer
schema.registry.url: http://localhost:8081
попробуйте разработать меня относительно этой аннотации с помощью некоторого сценария ios, где это может быть полезно
РЕДАКТИРОВАТЬ 1: Мои результаты -
Когда я вижу код @EnableSchemaRegistryClient, он вызывает класс конфигурации SchemaRegistryCl ientConfiguration, в котором bean-компонент DefaultSchemaRegistryClient является ConditionalOnMissingBean. так как я использую KafkaAvroSerializer и Deserializer, которые по умолчанию регистрируют CachedSchemaRegistryClient для kafkaSerializers, так что это означает, что DefaultSchemaRegistryClient никогда не будет зарегистрирован в случае kafkaAvroSerializer, пока мы не создадим bean-компонент этого как основной
Пожалуйста, предложите * 1014 влияние, которое может оказать *
SchemaRegistryConfiguration.class
@Bean
@ConditionalOnMissingBean
public SchemaRegistryClient schemaRegistryClient() {
DefaultSchemaRegistryClient defaultSchemaRegistryClient = new DefaultSchemaRegistryClient();
if (StringUtils.hasText(this.schemaRegistryClientProperties.getEndpoint())) {
defaultSchemaRegistryClient
.setEndpoint(this.schemaRegistryClientProperties.getEndpoint());
}
SchemaRegistryClient client = (this.schemaRegistryClientProperties.isCached())
? new CachingRegistryClient(defaultSchemaRegistryClient)
: defaultSchemaRegistryClient;
return client;
}
, это означает, что SchemaRegistryclient зависит от типа сериализатора, который вы используете ??