[英]Is there a way to configure custom RecordMessageConverter in spring-kafka?
我创建了一个自定义RecordMessageConverter
,它在toMessage
和fromMessage
中打印(我创建 Bean,如https://www.confluent.io/blog/spring-for-apache-kafka-deep-dive-part-1-error-handling -message-conversion-transaction-support )但不幸的是它没有绑定到监听器。 我可以显式绑定它还是应该做其他事情来使它起作用?
public class MobileMessageConverter implements RecordMessageConverter {
@Override
public Message<?> toMessage(ConsumerRecord<?,?> record, Acknowledgment acknowledgment, Consumer<?, ?> consumer, Type payloadType) {
System.out.println("Converting toMessage");
return null;
}
@Override
public ProducerRecord<CustomKey, CustomValue> fromMessage(Message<?> message, String defaultTopic) {
System.out.println("Converting fromMessage");
return new ProducerRecord("UNKNOWN",new CustomValue());
}
}
@RestController
public class CustomKafkaController {
@Bean
public RecordMessageConverter converter() {
return new CustomMessageConverter();
}
@KafkaListener(topics = "UNKNOWN", containerFactory = "kafkaListenerContainerFactory", groupId = "1")
public void listenAsObject(ConsumerRecord<CustomKey, CustomValue> cr) {
System.out.println(cr.getValue().getCustomMessage());
}
}
我解决它!
kafkaListenerContainerFactory
)。RecordMessageConverter
的MessagingMessageConverter
并实现了方法extractAndConvertValue
listenAsObject
并将其替换为您转换为的ConsumerRecordtype
例如:
如果要将自定义值更改为字符串:
创建新转换器:
public class CustomToStringMessageConverter extends MessagingMessageConverter {
@Override
protected String extractAndConvertValue(ConsumerRecord<?, ?> record, Type type){
return "EmptyString"
}
}
将侦听器更改为:
@KafkaListener(topics = "UNKNOWN", containerFactory = "kafkaListenerStringContainerFactory", groupId = "1")
public void listen2(String cr) {
**DO SOMETHING WITH THE CONVERTED CR**
}
最后一件事是通过以下方式获取转换后的 Bean 并将其设置在您的工厂中:
factory.setMessageConverter(new CustomToStringMessageConverter ());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.