【问题标题】:elastic4s does not exitelastic4s不退出
【发布时间】:2014-12-24 00:11:38
【问题描述】:

我尝试运行了一个elastic4s的示例代码,如下,

import com.sksamuel.elastic4s.ElasticClient
import com.sksamuel.elastic4s.ElasticDsl._

object hw extends App {
  val client = ElasticClient.local
  client.execute(create index "bands")
  client.execute { index into "bands/artists" fields "name"->"coldplay" }.await
  val resp = client.execute { search in "bands/artists" query "coldplay" }.await
  println(resp)
  client.close
}

程序正确打印结果,但它不会自行退出。不知道是不是我的代码或者环境有问题。

【问题讨论】:

  • JVM 直到所有线程都退出后才会退出。我不熟悉elastic4s,但您可能想在client.close 之前做client.shutdown?或者在调试器中运行它并检查哪些线程仍在运行。
  • 我可以确认同样的行为。事实上,即使您只是打开客户端并立即关闭它,也会发生这种情况。 close call 只是 Java 客户端的一个包装器,所以我不确定它为什么不立即终止。
  • @Imm 不起作用...

标签: scala elasticsearch elastic4s


【解决方案1】:

尝试使用shutdownshutdown 实际上会委托给prepareNodesShutdown,这是ClusterAdminClient 的一种方法,会关闭一个节点。 shutdown 不带任何参数将关闭本地节点。

编辑:添加代码和 javadoc 链接

以下内容对我有用,并且在 elastic4s 1.4.0 中按预期工作(即 main 已终止)

import com.sksamuel.elastic4s.ElasticClient
import com.sksamuel.elastic4s.ElasticDsl._

object Main extends App {
  val client = ElasticClient.local
  client.execute(create index "bands")
  client.execute { index into "bands/artists" fields "name"->"coldplay" }.await
  val resp = client.execute { search in "bands/artists" query "coldplay" }.await
  println(resp)
  client.close()
  client.shutdown
}

【讨论】:

  • 有关机方法吗?客户端类有 javadoc,我看不到关机,只能关闭。 javadoc.kyubu.de/elasticsearch/v1.4.2/org/elasticsearch/client/…
  • 这不起作用。即使在最后一行调用 sys.exit(0) 也不起作用。我不知道为什么。
  • 好吧,我只检查了 source 的 elastic4s 和 shutdown 似乎是 java.admin.cluster.prepareNodesShutdown 的包装器
  • @user3567830 发布的示例对我有用。我认为在关闭客户端之前调用 shutdown 可能会更合适一些,但无论哪种方式它似乎都有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多