要编写一个不使用while
循环的Java Kafka消费者应用程序,可以使用KafkaConsumer#poll
方法来获取消息并处理它们。poll
方法将会阻塞直到有可用的消息或超时。
下面是一个示例代码:
import org.apache.kafka.clients.consumer.ConsumerConfig;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.apache.kafka.clients.consumer.ConsumerRecords;
import org.apache.kafka.clients.consumer.KafkaConsumer;
import java.util.Collections;
import java.util.Properties;
public class KafkaConsumerExample {
public static void main(String[] args) {
String bootstrapServers = "localhost:9092";
String groupId = "my-group";
String topic = "my-topic";
// 设置消费者配置
Properties props = new Properties();
props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
props.put(ConsumerConfig.GROUP_ID_CONFIG, groupId);
props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer");
props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer");
// 创建消费者实例
KafkaConsumer consumer = new KafkaConsumer<>(props);
// 订阅主题
consumer.subscribe(Collections.singletonList(topic));
// 消费消息
boolean running = true;
while (running) {
ConsumerRecords records = consumer.poll(1000);
for (ConsumerRecord record : records) {
System.out.println("Received message: " + record.value());
}
}
// 关闭消费者
consumer.close();
}
}
在上面的示例中,我们创建了一个KafkaConsumer
实例,并订阅了一个主题。然后,我们使用poll
方法来获取消息并处理它们。如果没有可用的消息,poll
方法将会阻塞直到有消息可用或超时。在处理完消息后,我们可以设置一个标志running
来控制是否继续消费消息。当我们想要停止消费时,只需将running
设置为false
。
请注意,上述示例仅用于演示如何不使用while
循环编写Kafka消费者应用程序。在实际生产环境中,您可能需要根据具体需求进行更复杂的处理逻辑和错误处理。