我已经整理了一个示例应用程序来测试Spring Apache Kafka . 我正在成功消费通过KafkaTemplate发送消息,甚至能够使用ConsumerRecord输出从模板发送的消息,所以我知道消费者正在接收数据,但我想弄明白一件事 .

How can I consume the messages without having to throw some extra value in there when creating my consumerRecord bean?

我错过了一些我根本不需要创建这个bean的东西,但是在这个guide中我使用了我不明白在 listen 方法中使用ConsumerRecord的地方以及该方法甚至被使用的地方?

在我的配置类中,我创建了一个consumerRecord bean:

@Bean
public ConsumerRecord<String,String> consumerRecord(){
    return new ConsumerRecord<>("my-topic", 1, 1L, "key", "value");
}

除了我指定为my-topic的主题之外,基本上是虚拟属性 .

我正在通过模板发送消息,如下所示:

void sendMsg(){
    ProducerRecord<String,String> producerRecord = new ProducerRecord<>("my-topic", "Sample Data");

    try {
        latch.await(1000L, TimeUnit.SECONDS);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    template.send(producerRecord);
    listen(consumerRecord);
}

我用这种方法将发送到主题的所有值打印到 Logger :

private static final String topicName = "my-topic";

@KafkaListener(topics = topicName)
private void listen(ConsumerRecord consumerRecord){
    logger.info("Consumer Record Value:::: " + consumerRecord.value());
    latch.countDown();
}

我担心的是,我不会发生"value"我放在消费者记录bean的末尾 . 在现实世界的应用程序中,我不希望消耗一些随机虚拟值,所以我如何避免这种情况,只关注通过 KafkaTemplate 发送的数据?

在将应用程序放在一起时,我使用Spring Docs作为我的参考点(在引用该指南时前面已经链接过) .

*编辑:如果有人知道?你能直接从制片人那里传递 Value 吗?但肯定它甚至不会进入 Kafka 呢?