我已经实现了自定义kafkalistenererrorhandler。如果邮件处理失败,我想发送邮件重试主题。为此,我添加了一些标题。为此,我使用了弹簧式弹簧。
问题是当我使用kafkatemplate发送消息时,它在字符串消息中添加了“ \”。
以下是我正在执行的代码。
public Object handleError(Message<?> message, ListenerExecutionFailedException exception) {
logger.info("Enter handleError message");
int numberOfRetries = messageRetryCount(message);
MessageBuilder<?> messageBuilder = MessageBuilder.fromMessage(message).removeHeader(KafkaHeaders.TOPIC)
.removeHeader(KafkaHeaders.PARTITION_ID).removeHeader(KafkaHeaders.MESSAGE_KEY)
.setHeader(KafkaHeaders.TOPIC, numberOfRetries > 0 ? retryTopic : dlqTopic);
template.send(messageBuilder.build());
在内部,spring-kafka将消息转换为producerRecord。在输出中将\添加到字符串中。
2020-03-20 12:25:28.804 INFO 10936 --- [_consumer-0-C-1] c.h.kafkaretry.consumer.SimpleConsumer : in rety :: "\"testfail\""
有人遇到同样的问题吗?有其他选择或解决方案吗?
答案 0 :(得分:0)
好像您使用JsonSerializer
,而数据只是一个纯字符串。考虑在消费者端使用StringSerializer
或JsonDeserializer
。