【问题标题】:datastax driver causign application to be "zombie" and not exitdatastax 驱动程序导致应用程序成为“僵尸”而不退出
【发布时间】:2019-06-10 17:42:20
【问题描述】:

当我的连接打开时,应用程序不会退出,这给我带来了一些令人讨厌的问题(高度并发并使用共享会话嵌套,不知道每个部分何时完成) - 有没有办法让确定集群不会“挂起”应用程序?

例如这里:

object ZombieTest extends App {
  val session= Cluster.builder().addContactPoint("localhost").build().connect()
// app doesn't exit unless doing:
session.getCluster.close() // won't exit unless this is called
}

【问题讨论】:

  • 您使用的是哪个并发原语,Future? Scala 提供了很多机制来处理这个问题:highly concurrent and nested using a shared sesssion, don't know when each part is finished.
  • 它是从一个非常复杂且难以更改的 spark java 作业中调用的

标签: scala netty datastax-java-driver


【解决方案1】:

在稍微偏颇的回答中,您可以查看 https://github.com/outworkers/phantom 而不是使用标准的 java 驱动程序。

  • 您会自动从查询中获得scala.concurrent.Futuremonix.eval.Task 甚至com.twitter.util.Future。您可以在这三者之间进行选择。
  • DB 连接池在 ContactPointDatabase 抽象层内更好地隔离,它们具有 shutdown 方法,您可以轻松地将其连接到您的应用生命周期。
  • 它比 Java 驱动程序快得多,因为类型的序列化和反序列化是通过更高级的宏机制在编译时连接的。

简短的回答是,当您关闭其他所有设备时,您需要有一种调用session.closesession.closeAsync 的生命周期方式,这就是它的设计工作方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-07
    • 2018-06-06
    • 2011-04-29
    • 2016-08-04
    • 2013-05-31
    • 1970-01-01
    • 2016-10-02
    相关资源
    最近更新 更多