gpt4 book ai didi

spring - Kafka Spring 集成 : Headers not coming for kafka consumer

转载 作者:行者123 更新时间:2023-12-04 17:30:07 24 4
gpt4 key购买 nike

我正在使用 Kafka Spring Integration 来使用 kafka 发布和使用消息。我看到有效负载正确地从生产者传递给消费者,但标题信息在某处被覆盖。

@ServiceActivator(inputChannel = "fromKafka")
public void processMessage(Message<?> message) throws InterruptedException,
ExecutionException {
try {
System.out.println("Headers :" + message.getHeaders().toString());
}
} catch (Exception e) {
e.printStackTrace();
}
}

我得到以下标题:
Headers :{timestamp=1440013920609, id=f8c645f7-677b-ec32-dad0-a7b79082ef81}

我正在像这样在生产者端构建消息:
Message<FeelDBMessage> message = MessageBuilder
.withPayload(samplePayloadObj)
.setHeader(KafkaHeaders.MESSAGE_KEY, "key")
.setHeader(KafkaHeaders.TOPIC, "sampleTopic").build();

// publish the message
publisher.publishMessage(message);

以下是生产者的标题信息:
 headers={timestamp=1440013914085, id=c4159c1c-2c67-634b-ef8d-3fb026b1172e, kafka_messageKey=key, kafka_topic=sampleTopic}

知道为什么标题会被不同的值覆盖吗?

最佳答案

仅仅因为默认情况下框架使用不可变的 GenericMessage .

对现有消息的任何操作(例如 MessageBuilder.withPayload )都会产生一个新的 GenericMessage实例。

另一方面,Kafka 不支持任何 headers抽象如 JMS 或 AMQP。这就是为什么KafkaProducerMessageHandler只需在向 Kafka 发布消息时执行此操作:

this.kafkaProducerContext.send(topic, partitionId, messageKey, message.getPayload());

如您所见,它不会发送 headers根本。所以,对方(消费者)只处理 message从主题为 payload和一些系统选项为 headers喜欢 topic , partition , messageKey .

简而言之:我们不会通过 Kafka 传输 header ,因为它不支持它们。

关于spring - Kafka Spring 集成 : Headers not coming for kafka consumer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32104810/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com