当前位置: 首页 > 知识库问答 >
问题:

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

田马鲁
2023-03-14

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

我特别感兴趣的是当主机可以访问,但Cassandra端口被阻塞或Cassandr守护进程未运行时的情况。我正在编写一个命令行客户端,如果它不能在合理的时间内连接,它应该退出并报告适当的错误消息。目前,如果接触点可以到达,驾驶员似乎会永远等待接触点的响应。

也就是说,如果驱动程序在给定的最长时间内无法与任何联系点的Cassandra守护程序通信,我希望< code>Cluster.build()抛出< code > NoHostAvailableException 。

  • 创建我自己的重试策略将不起作用:即用于重试查询,我希望在我们准备好运行查询之前应用超时。
  • 创建我自己的重新连接政策最初看起来很有希望,但接口的契约没有给出任何手段来指示“认为这个节点永远死了”

共有1个答案

穆单鹗
2023-03-14

也就是说,我希望 Cluster.build() 在给定的最大时间内无法与任何接触点的 Cassandra 守护程序通信,则抛出一个 NoHost 可用异常。

情况应该是这样。驱动程序将尝试连接到每个联系点,如果无法连接到任何联系点,则会引发异常。你可以控制驱动程序尝试通过套接字选项连接(到每个节点)的最长时间(默认值为 5 秒)。

我的经验是,如果没有可以连接到的节点,Cluster.build()确实会返回异常,但是如果您的体验不同,您可能希望将其报告为错误(但是关于如何重现它的更多细节会有所帮助)。

话虽如此:

  • 上述超时是针对每个主机的。因此,如果您传递了100个联系点的列表,理论上您可能必须等待500秒(默认情况下)才能获得NoHost可用异常。但是提供这么多的联系点没有实际意义,在实践中,如果Cassandra没有在尝试的节点上运行,则连接尝试通常会立即失败(您不会等待超时)。
  • 驱动程序端当前没有真正的查询超时。这意味着,如果驱动程序确实连接到一个节点(这意味着某个进程正在侦听该端口并接受连接),但对他的初始消息没有答案,那么它确实可以永远保持。这可能应该得到解决,我鼓励你在 https://datastax-oss.atlassian.net/browse/JAVA 上开一张票。但是,这似乎不是您描述的情况,因为如果“卡桑德拉端口被阻止或卡桑德拉守护程序未运行”,那么驱动程序首先应该无法连接。
 类似资料:
  • 在我们正在处理的应用程序中,用户可以通过在文本字段中输入任意的JDBC连接URL来连接到外部RDBMS。我们的一个客户报告说,当他无意中试图连接到带有MySQL JDBC URL的Microsoft SQL server时,我们的应用程序服务器在0%的CPU下冻结(无限期)。 下面的Java片段说明了这种情况: 运行代码段: null 问题: 1)这可能是MariaDB JDBC驱动程序中的一个b

  • 我目前正在创建一个API,它使用具有3个节点的Cassandra集群来存储数据。我使用PHP 5.6.17、Cassandra 2.2.3和Datastax PHP Driver 1.1.0在本地机器上开发它,一切都很顺利。 但是,我们决定迁移到远程 Cassandra 集群(带有本机协议 4 的 3.4),我无法通过 PHP 访问它,因为我收到以下错误:发生错误:16777226 - 没有可用于

  • 我最近在同一个内网的两台硬件配置完全相同的服务器上搭建了一个只有两个节点的cassandra集群。它与cqlsh配合得很好,一切似乎都很完美。然后我按照datastax网站上的代码示例编写java代码来处理集群,问题就来了。该程序正常工作,它连接到群集,并成功地向其中写入数据和从中读取数据。然而,连接速度太慢了!我将代码部署在一个集群节点所在的同一台机器上,连接需要5秒多的时间。更准确地说,是行s

  • 查询从something_data中选择username作为col6、性别作为col1、last_name作为col2、email作为col3、first_name作为col4、something_uuid作为col5、group_email作为col7、deleted作为col8、puars作为col9,其中username=?;在/xx.yy.91.205:9042上未准备,请在重试执行之前准

  • 无法启动边缘驱动程序,我得到下面提到的错误和代码,我使用的是下面。请帮忙

  • 正在尝试使用MongoDB 3.6版通过Java驱动程序连接Atlas群集。 所以,我写的是: 在这种情况下,错误是: 当程序以使用MongoDB 3.6版或更高版本的snippet开始时,不使用: 在POM文件我有依赖: 此外,当我启动时,我的数据库会添加到此地址,但我为集群添加了路径,但不是为了这个。也许我需要写具体集群的路径,或者? Ofc,我有管理员用户。此外,我还可以通过Compass连