【发布时间】:2019-04-11 21:23:11
【问题描述】:
我正在使用 ReplyingKafkaTemplate 向 Kafka 发送消息,它正在使用 kafka_correlationId 发送消息。但是,当它遇到我的 @KafkaListener 方法并将其转发到回复主题时,标头会丢失。
如何保留 kafka 标头?
这是我的方法签名:
@KafkaListener(topics = "input")
@SendTo("reply")
public List<CustomOutput> consume(List<CustomInput> inputs) {
... /* some processing */
return outputs;
}
我创建了一个ProducerInterceptor,因此我可以看到从ReplyingKafkaTemplate 以及@SendTo 注释发送的标头。由此,另一个奇怪的事情是ReplyingKafkaTemplate 没有将记录在案的kafka_replyTopic 标头添加到消息中。
ReplyingKafkaTemplate 的配置方式如下:
@Bean
public KafkaMessageListenerContainer<Object, Object> replyContainer(ConsumerFactory<Object, Object> cf) {
ContainerProperties containerProperties = new ContainerProperties(requestReplyTopic);
return new KafkaMessageListenerContainer<>(cf, containerProperties);
}
@Bean
public ReplyingKafkaTemplate<Object, Object, Object> replyingKafkaTemplate(ProducerFactory<Object, Object> pf, KafkaMessageListenerContainer<Object, Object> container) {
return new ReplyingKafkaTemplate<>(pf, container);
}
我不确定这是否相关,但我也添加了 Spring Cloud Sleuth 作为依赖项,并且当我发送消息时跨度/跟踪标头在那里,但是转发消息时会生成新消息。
【问题讨论】:
标签: spring apache-kafka spring-kafka spring-kafka-test