我在我的测试用例中使用KafkaProducer
,而我的制作人使用schemaRegistryUrl
指向我的本地Schema Registry
实例。有没有办法模拟KafkaProducer
与Schema Registry的连接方式?也就是说,让我的测试中的KafkaProducer/Consumer
在没有正在运行的Schema Registry实例的情况下工作。
答案 0 :(得分:6)
绝对有。 KafkaAvroSerializer和KafkaAvroDeserializer都有一个构造函数,它接受SchemaRegistryClient。您可以使用MockSchemaRegistryClient作为SchemaRegistryClient。这是一个代码片段,展示了如何执行此操作:
private MockSchemaRegistryClient mockSchemaRegistryClient = new MockSchemaRegistryClient();
private String registryUrl = "unused";
public <T> Serde<T> getAvroSerde(boolean isKey) {
return Serdes.serdeFrom(getSerializer(isKey), getDeserializer(isKey));
}
private <T> Serializer<T> getSerializer(boolean isKey) {
Map<String, Object> map = new HashMap<>();
map.put(KafkaAvroDeserializerConfig.AUTO_REGISTER_SCHEMAS, true);
map.put(KafkaAvroDeserializerConfig.SCHEMA_REGISTRY_URL_CONFIG, registryUrl);
Serializer<T> serializer = (Serializer) new KafkaAvroSerializer(mockSchemaRegistryClient);
serializer.configure(map, isKey);
return serializer;
}
private <T> Deserializer<T> getDeserializer(boolean key) {
Map<String, Object> map = new HashMap<>();
map.put(KafkaAvroDeserializerConfig.SPECIFIC_AVRO_READER_CONFIG, "true");
map.put(KafkaAvroDeserializerConfig.SCHEMA_REGISTRY_URL_CONFIG, registryUrl);
Deserializer<T> deserializer = (Deserializer) new KafkaAvroDeserializer(mockSchemaRegistryClient);
deserializer.configure(map, key);
return deserializer;
}
答案 1 :(得分:0)
Here是一个存根和嘲弄的例子,但是有了春云流。查看src / test / java / com / example / cloud / avro /文件夹。