如何检查与Kafka的Kafka监听器连接?

时间:2019-05-08 13:49:53

标签: spring-boot listener spring-kafka health-monitoring

我已经制作了一个监听器,它以字符串作为键,以通用的Avro-class V作为消息来监听Kafka主题,如下所示。这样可以很好地工作,并在消息发送到主题时触发MessageListener。

String topic = "foo-topic" //from constructor arguments. 
ConsumerFactory<String, V> consumerFactory = new DefaultKafkaConsumerFactory<>(
        consumerConfig(), getKeyDeserializer(), getValueDeserializer() //methods I've defined. 
);
ConcurrentMessageListenerContainer<String, V> container = new ConcurrentMessageListenerContainer<>(
        consumerFactory, new ContainerProperties(topic)
);
container.setupMessageListener((MessageListener<String, V>) record -> {
    // Do stuff...
});
container.start();

现在,提一个问题。我需要实现某种形式的健康检查方法,以检查与Kafka的连接。如何为ConcurrentMessageListenerContainer执行此操作?如果无法连接到Kafka,是否可以使用一种失败的方法?我正在研究通用的帮助程序类,并希望通过一些常规方法定期检查与Kafka的连接。

编辑: 经过一些试验,我想出了这种方法。如果找到主题,则返回true;如果无法连接到Kafka,则抛出异常。这是一件好事吗,我想念的是什么?

private boolean checkHealth() throws InterruptedException, ExecutionException, TimeoutException {
    Properties props = new Properties();
    props.setProperty(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, BOOTSTRAP);
    try (AdminClient admin = AdminClient.create(props)) {
        return admin.listTopics().names().get(10, TimeUnit.SECONDS).stream().anyMatch(t -> t.equals(topic));
    }
}

0 个答案:

没有答案