gpt4 book ai didi

java - 告诉 Datastax Java Cassandra 驱动程序超时集群连接

转载 作者:搜寻专家 更新时间:2023-10-31 19:46:49 25 4
gpt4 key购买 nike

当 Datastax Java Cassandra 驱动程序尝试连接到您的集群时,您如何通知它超时?

我对主机可访问但 Cassandra 端口被阻止或 Cassandra 守护进程未运行的情况特别感兴趣。我正在编写一个命令行客户端,如果它无法在合理的时间内连接,它应该退出并报告合适的错误消息。目前看来,如果联系点可达,驱动程序将永远等待联系点的响应。

也就是我要Cluster.build()扔一个NoHostAvailableException如果驱动程序在给定的最长时间内无法与任何接触点的 Cassandra 守护程序通信。

  • 创建我自己的 RetryPolicy行不通:那是为了重试查询,我希望在我们准备好运行查询之前应用超时。
  • 创建我自己的 ReconnectinoPolicy最初看起来很有希望,但是接口(interface)的合约没有给出指示“认为这个节点永远死了”的方法

最佳答案

That is, I want Cluster.build() to throw a NoHostAvailableException if the driver can not communicate with the Cassandra daemon of any of the contact points within a given maximum time.

应该是这样的。驱动程序将尝试连接到每个接触点,如果连接失败则抛出异常。您可以通过 SocketOptions.setConnectTimeoutMillis() 控制驱动程序尝试连接(到每个节点)的最长时间(默认值为 5 秒)。

我的经验是,如果无法连接到任何节点,Cluster.build() 会返回异常,但如果您的经验不同,您可能希望将其报告为错误(但要更详细地说明如何重现此问题会有帮助)。

话虽这么说:

  • 以上超时是针对每个主机的。因此,如果您传递 100 个联系点的列表,理论上您可能必须等待 500 秒(默认情况下)才能获得 NoHostAvailableException。但是提供那么多联系点并没有实际意义,实际上,如果 Cassandra 没有在尝试的节点上运行,连接尝试通常会立即失败(您不会等待超时)。
  • 驱动端目前没有真正的查询超时。这意味着如果驱动程序确实连接到一个节点(这意味着 一些 进程正在监听该端口并接受连接),但没有得到对其初始消息的答复,那么它确实可以永远保持.这可能应该得到解决,我鼓励您在 https://datastax-oss.atlassian.net/browse/JAVA 上为此开一张票。 .但是,这似乎不是您所描述的情况,因为如果“Cassandra 端口被阻止或 Cassandra 守护进程未运行”,那么驱动程序首先应该无法连接。

关于java - 告诉 Datastax Java Cassandra 驱动程序超时集群连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17680245/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com