Kafka 模拟注册表用于测试

问题描述 投票:0回答:3

我已经在我的 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
java apache-kafka confluent-schema-registry
3个回答
1
投票

当请求 ID 1 时,您仍然需要定义一个模拟函数响应,否则您的模拟只是一个存根,并且没有注册供消费者查找的模式,在这种情况下

您可能想尝试这个库 - https://github.com/bakdata/ Fluent-kafka-streams-tests/tree/master/schema-registry-mock


1
投票

使用过有效的:

private MockSchemaRegistryClient mockSchemaRegistryClient = new MockSchemaRegistryClient();

0
投票

我发现您需要使用

MockSchemaRegistry.getClientForScope("dummy-registry")
而不是使用
new MockSchemaRegistryClient()
来指定注册表。同时设置
schema.registry.url = mock://dummy-registry
,使用与
getClientForScope
中相同的名称。

© www.soinside.com 2019 - 2024. All rights reserved.