当我向kafka主题发送记录时,消费者收到带有一些不必要标题的“ nativeHeaders”(HeaderMethodArgumentResolver甚至无法将其转换为Map)。
我正在寻找重写HeaderMethodArgumentResolver方法“ getNativeHeaders”的方法,以排除该垃圾标头,并且不知道如何向春季提供该子类。
org.springframework.messaging.handler.annotation.support.HeaderMethodArgumentResolver中有一个原始方法:
private Map<String, List<String>> getNativeHeaders(Message<?> message) {
return (Map)message.getHeaders().get("nativeHeaders");
}
此呼叫的位置:
message.getHeaders().get("nativeHeaders");
返回以下内容: https://ibb.co/qrvMNMk (如您所见,除了键值之外,还有一个额外的字段“ headerValue”,这会阻止强制转换)
通过kafkaTemplate发送记录,如下所示:
kafkaTemplate.send(new ProducerRecord<String, TempContractEntity>(topics.getSubmit(), tempContractEntity));
消费者通过@KafkaListener批注获取消息:
@KafkaListener(topics = "#{settingsService.getTopics()}")
public void processMessage(OrchestratorRequestImpl orchestratorRequest,
@Header(KafkaHeaders.RECEIVED_TOPIC) String topicName) throws Throwable{//...}
通常我想找到一种预处理kafka标头的方法
答案 0 :(得分:0)
NonTrustedHeaderType
指示带有该标头及其类的消息sent
不可信。对于您显示的发送类型,不会发生这种情况-没有Message<?>
参与其中,因此问题图片中缺少某些内容。
您可以做的一件事是在使用者配置中添加ConsumerInterceptor
,并清除onConsume()
方法中不需要的标头。
但是您应该真正弄清楚是谁发送的。