为什么 DLT 中的消息使用 DeadLetterPublishingRecoverer base64 编码

Why are messages in DLT using DeadLetterPublishingRecoverer base64 encoded

我配置了一个 errorHandler,它使用

将记录发送到 DLT
@Bean
    public DeadLetterPublishingRecoverer recoverer(KafkaTemplate<String, List<T>> template) {
        return new DeadLetterPublishingRecoverer(template);
    }

    @Bean
    public ErrorHandler errorHandler(DeadLetterPublishingRecoverer recoverer) {
        return new SeekToCurrentErrorHandler(recoverer, new FixedBackOff(0L, 2L));
    }

我正在使用此 DLT 来捕获由 ErrorHandlingDeserializer2

处理的序列化错误

我面临的问题是 DLT 中的消息采用 base64 编码格式而不是纯字符串。

制作人 分布式账本技术消费者

test message 作为 dGVzdCBtZXNzYWdl

进入 DLT

另一个正在发生的问题是请求大小因 base64 编码而增加。
我希望消息按 DLT 中的原样发送。
能否指点一下。

显示您的生产者工厂配置。

也许您使用的是普通生产者工厂?

最好的猜测是你在那里使用 JsonSerializer 而不是 ByteArraySerializer

在 2.5 版中,您可以在每个 KafkaTemplate 中覆盖生产者工厂配置。