Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以单独使用卡夫卡主题中的每条消息?_Java_Apache Kafka_Kafka Consumer Api_Quarkus - Fatal编程技术网

Java 是否可以单独使用卡夫卡主题中的每条消息?

Java 是否可以单独使用卡夫卡主题中的每条消息?,java,apache-kafka,kafka-consumer-api,quarkus,Java,Apache Kafka,Kafka Consumer Api,Quarkus,好的,目标是: 我有一个应该发送邮件的服务,如果失败,我的卡夫卡制作人会将此邮件发送到卡夫卡主题。第二个程序每两分钟查看一次主题,应该只使用一条消息(最早的一条),然后重试发送,如果失败,程序应该将此消息返回主题 我已经有了一个消费者,但问题是,它会消耗我到目前为止还没有使用消费者的所有消息。但我希望他只吃最老的,他以前从未吃过 这是我的实际消费者: “customMessage”是我为测试而创建的一个类,它只是一个具有不同属性的对象,比如日期、消息和其他东西。 因为测试代码有点修改,所以这个消

好的,目标是: 我有一个应该发送邮件的服务,如果失败,我的卡夫卡制作人会将此邮件发送到卡夫卡主题。第二个程序每两分钟查看一次主题,应该只使用一条消息(最早的一条),然后重试发送,如果失败,程序应该将此消息返回主题

我已经有了一个消费者,但问题是,它会消耗我到目前为止还没有使用消费者的所有消息。但我希望他只吃最老的,他以前从未吃过

这是我的实际消费者:

“customMessage”是我为测试而创建的一个类,它只是一个具有不同属性的对象,比如日期、消息和其他东西。 因为测试代码有点修改,所以这个消费者正在运行endles。它也只显示消息而不是处理它,因此只有“
System.out.println(message.displayMessage());

公共级消费电子{

public static void main(String[] args) {

    Properties properties = new Properties();
    properties.put("bootstrap.servers", "localhost:9092");
    properties.put("group.id", "happyConsumer");
    properties.put("auto.offset.reset", "earliest");
    properties.put("enable.auto.commit", "false");
    properties.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
    properties.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");

    KafkaConsumer<String, String> consumer = new KafkaConsumer<String, String>(properties);

    consumer.subscribe(Arrays.asList("mymailtopic"));

    while (true) {
        ObjectMapper om = new ObjectMapper();
        ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
        for (ConsumerRecord<String, String> record : records) {
            customMessage message=null;
            try {
                 message = om.readValue(record.value(), customMessage.class);
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }
            System.out.println(message.displayMessage());
        }
    }


}
publicstaticvoidmain(字符串[]args){
属性=新属性();
properties.put(“bootstrap.servers”,“localhost:9092”);
properties.put(“group.id”、“happyConsumer”);
properties.put(“自动偏移、重置”、“最早”);
properties.put(“enable.auto.commit”、“false”);
properties.put(“key.deserializer”、“org.apache.kafka.common.serialization.StringDeserializer”);
properties.put(“value.deserializer”、“org.apache.kafka.common.serialization.StringDeserializer”);
卡夫卡消费者=新卡夫卡消费者(财产);
consumer.subscribe(Arrays.asList(“mymailtopic”);
while(true){
ObjectMapper om=新的ObjectMapper();
ConsumerRecords记录=consumer.poll(持续时间:百万分之一百);
对于(消费者记录:记录){
customMessage=null;
试一试{
message=om.readValue(record.value(),customMessage.class);
}捕获(JsonProcessingException e){
e、 printStackTrace();
}
System.out.println(message.displayMessage());
}
}
}
}

根据实际代码,该服务也能正常工作,但我至少可以尝试一下它是否能像我在第一段中提到的那样正常工作。因此,我的问题是:

  • 甚至可以只使用该主题中的一条消息吗
  • 如果是,我怎么做

  • 我在整个服务中使用Java和quarkus(我想是最新版本的Kafka)。

    您可以使用属性逐个消息使用消息,在配置中将此属性设置为
    1

    对poll()的单个调用中返回的最大记录数


    您可以使用属性按消息使用消息,在配置中将此属性设置为
    1

    对poll()的单个调用中返回的最大记录数


    您是指一条接一条的消息?还是指一条特定的消息?@Deadpool是的,仅限一条接一条的消息?还是指一条特定的消息?@Deadpool是的,仅限一条接一条的消息
    properties.put("max.poll.records", 1);