@EnableSchemaRegistryClient会做什么?

时间:2020-06-18 18:56:35

标签: spring-boot avro spring-kafka spring-cloud-stream confluent-schema-registry

因为,这是我使用架构注册表的第一个应用程序,所以,我对@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

请在可能有用的某些情况下尝试详细说明此注释

编辑1:我的发现-

当我看到@EnableSchemaRegistryClient的代码时,它将调用配置类SchemaRegistryClientConfiguration,其中DefaultSchemaRegistryClient bean为ConditionalOnMissingBean。 从那以后,我正在使用KafkaAvroSerializer和Deserializer,它们默认情况下会注册kafkaSerializers的CachedSchemaRegistryClient,因此这意味着DefaultSchemaRegistryClient在kafkaAvroSerializers的情况下将永远不会注册,直到我们将其创建为主要bean

请提出可能产生的影响

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取决于您使用的序列化程序的类型?

0 个答案:

没有答案