kafkatemplate正在修改已发送的消息,需要按原样发送原始消息

时间:2020-03-20 11:49:54

标签: spring-kafka

我已经实现了自定义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\""

有人遇到同样的问题吗?有其他选择或解决方案吗?

1 个答案:

答案 0 :(得分:0)

好像您使用JsonSerializer,而数据只是一个纯字符串。考虑在消费者端使用StringSerializerJsonDeserializer