为什么AdminClient不抛出异常?

时间:2019-07-11 09:15:42

标签: scala apache-kafka

我有一个Kafka AdminClient,当Kafkaserver处于活动状态时,它将返回true,否则返回false。

  private def health(server: String): Boolean = {
    val props = new Properties
    props.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, server)
    props.put(AdminClientConfig.CONNECTIONS_MAX_IDLE_MS_CONFIG, "10000")
    props.put(AdminClientConfig.REQUEST_TIMEOUT_MS_CONFIG, "5000")

    try {
      AdminClient
        .create(props)
        .listTopics()
        .names()
        .get()
      true
    } catch {
      case _: InterruptedException => false
      case _: ExecutionException => false
    }

现在,我有一种情况,Kafka处于脱机状态,并且该方法都不返回falsetrue

我在做什么错了?

2 个答案:

答案 0 :(得分:1)

应用评论后,我似乎无法复制该问题,例如以下内容

  val kafkaFuture = new KafkaFutureImpl
  kafkaFuture.completeExceptionally(new RuntimeException("splosh"))
  println(
    try {
      kafkaFuture.get()
    } catch {
      case _: InterruptedException => "boom"
      case _: ExecutionException => "crash"
    }
  )

输出crash,表明case _: ExecutionException分支被正确命中。

答案 1 :(得分:0)

import scala.util.Try

private def health(server: String): Boolean = {
  val props = new Properties
  props.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, server)
  props.put(AdminClientConfig.CONNECTIONS_MAX_IDLE_MS_CONFIG, "10000")
  props.put(AdminClientConfig.REQUEST_TIMEOUT_MS_CONFIG, "5000")

  Try (
    AdminClient
      .create(props)
      .listTopics()
      .names()
      .get()
  ).isSuccess
}

发生这种情况的原因是引发了另一个异常。