Scala 为什么AdminClient不抛出异常?

Scala 为什么AdminClient不抛出异常?,scala,apache-kafka,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.CONNECTION

我有一个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
    }
现在,我有一个场景,卡夫卡离线,该方法既不返回
false
也不返回
true


我做错了什么?

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

  val kafkaFuture = new KafkaFutureImpl
  kafkaFuture.completeExceptionally(new RuntimeException("splosh"))
  println(
    try {
      kafkaFuture.get()
    } catch {
      case _: InterruptedException => "boom"
      case _: ExecutionException => "crash"
    }
  )
输出
crash
,显示
case\uux:ExecutionException
分支被正确命中

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
}

发生这种情况的原因是另一个异常正在抛出。

方法
names()
返回未来,但
get()
等待结果准备就绪。方法
get
不返回未来,而是返回结果。下面是get方法的描述
在必要时等待这个未来完成,然后返回其结果。
我不明白,你想说什么。
kafkaFuture.get()
应该模拟
…names().get()
,因为
names()
返回
kafkaFuture
。因此,我要说的是,如果在调用
get
时抛出异常,那么
try-catch
应该可以正常工作,因为它是
执行异常。您确定
AdminClient
正在抛出异常吗?但为什么在调用get或异常时没有得到结果呢。