Мы используем Kafka с Spring Cloud Stream, и нам нужно подключиться к Confluent Schema Registry в нашем компоненте Spring Boot, см. https://github.com/donalthurley/KafkaConsumeScsAndConfluent.
Мы добавили следующую конфигурацию для создания необходимого bean-компонента ConfluentSchemaRegistryClient, см. https://github.com/donalthurley/KafkaConsumeScsAndConfluent/blob/master/src/main/java/com/example/kafka/KafkaConfig.java, который должен переопределить реестр схем по умолчанию из Весенний поток облаков.
Однако после некоторых развертываний мы периодически наблюдали следующий сбой.
org.springframework.messaging.MessageDeliveryException: failed to send Message to channel
Основная причина показывает эту трассировку стека
Caused by: java.lang.NullPointerException
at org.springframework.cloud.stream.schema.client.DefaultSchemaRegistryClient.register(DefaultSchemaRegistryClient.java:71)
at org.springframework.cloud.stream.schema.avro.AvroSchemaRegistryClientMessageConverter.resolveSchemaForWriting(AvroSchemaRegistryClientMessageConverter.java:238)
at org.springframework.cloud.stream.schema.avro.AbstractAvroMessageConverter.convertToInternal(AbstractAvroMessageConverter.java:179)
at org.springframework.messaging.converter.AbstractMessageConverter.toMessage(AbstractMessageConverter.java:201)
at org.springframework.messaging.converter.AbstractMessageConverter.toMessage(AbstractMessageConverter.java:191)
at org.springframework.messaging.converter.CompositeMessageConverter.toMessage(CompositeMessageConverter.java:83)
at org.springframework.cloud.stream.binding.MessageConverterConfigurer$OutboundContentTypeConvertingInterceptor.doPreSend(MessageConverterConfigurer.java:322)
at org.springframework.cloud.stream.binding.MessageConverterConfigurer$AbstractContentTypeInterceptor.preSend(MessageConverterConfigurer.java:351)
at org.springframework.integration.channel.AbstractMessageChannel$ChannelInterceptorList.preSend(AbstractMessageChannel.java:611)
at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:453)
Тот факт, что DefaultSchemaRegistryClient вызывается AvroSchemaRegistryClientMessageConverter, указывает нам на наличие проблемы с подключением нашего bean-компонента ConfluentSchemaRegistryClient.
Требуется ли что-то еще в нашей конфигурации для обеспечения правильного подключения bean-компонента ConfluentSchemaRegistryClient?