我已经在我的 spring 属性文件中设置了:
spring.kafka.properties.schema.registry.url=mock://localhost
但是当我运行测试时,我得到以下结果:
Caused by: org.apache.kafka.common.errors.SerializationException: Error retrieving Avro unknown schema for id 1
at io.confluent.kafka.serializers.AbstractKafkaSchemaSerDe.toKafkaException(AbstractKafkaSchemaSerDe.java:259)
at io.confluent.kafka.serializers.AbstractKafkaAvroDeserializer$DeserializationContext.schemaFromRegistry(AbstractKafkaAvroDeserializer.java:341)
at io.confluent.kafka.serializers.AbstractKafkaAvroDeserializer.deserialize(AbstractKafkaAvroDeserializer.java:113)
at io.confluent.kafka.serializers.KafkaAvroDeserializer.deserialize(KafkaAvroDeserializer.java:55)
at org.apache.kafka.common.serialization.Deserializer.deserialize(Deserializer.java:60)
at org.springframework.kafka.support.serializer.ErrorHandlingDeserializer.deserialize(ErrorHandlingDeserializer.java:201)
... 16 common frames omitted
Caused by: io.confluent.kafka.schemaregistry.client.rest.exceptions.RestClientException: Subject Not Found; error code: 40401
at io.confluent.kafka.schemaregistry.client.MockSchemaRegistryClient.getSchemaBySubjectAndIdFromRegistry(MockSchemaRegistryClient.java:177)
at io.confluent.kafka.schemaregistry.client.MockSchemaRegistryClient.getSchemaBySubjectAndId(MockSchemaRegistryClient.java:262)
at io.confluent.kafka.serializers.AbstractKafkaAvroDeserializer$DeserializationContext.schemaFromRegistry(AbstractKafkaAvroDeserializer.java:330)
... 20 common frames omitted
当请求 ID 1 时,您仍然需要定义一个模拟函数响应,否则您的模拟只是一个存根,并且没有注册供消费者查找的模式,在这种情况下
您可能想尝试这个库 - https://github.com/bakdata/ Fluent-kafka-streams-tests/tree/master/schema-registry-mock
使用过有效的:
private MockSchemaRegistryClient mockSchemaRegistryClient = new MockSchemaRegistryClient();
我发现您需要使用
MockSchemaRegistry.getClientForScope("dummy-registry")
而不是使用 new MockSchemaRegistryClient()
来指定注册表。同时设置 schema.registry.url = mock://dummy-registry
,使用与 getClientForScope
中相同的名称。