如何判断Datastax Java Cassandra驱动程序在尝试连接到您的群集时是否超时?
我对主机可以访问的情况特别感兴趣,但是Cassandra端口被阻塞或者Cassandra守护进程没有运行。我正在编写一个命令行客户端,如果它无法在合理的时间内连接,它应该退出并报告合适的错误消息。目前,如果联系点可以到达,驱动程序似乎将永远等待接触点响应。
也就是说,如果驱动程序无法在给定的最长时间内与任何联系点的Cassandra守护进程通信,我希望Cluster.build()
抛出NoHostAvailableException
。
RetryPolicy
将不起作用:这是为了重试查询,我希望超时在之前应用我们准备好运行查询。ReconnectinoPolicy
最初看起来很有希望,但是接口的合同没有提供任何方法来表明“认为这个节点永远死了”答案 0 :(得分:7)
也就是说,如果驱动程序无法在给定的最长时间内与任何联系点的Cassandra守护程序通信,我希望Cluster.build()抛出NoHostAvailableException。
应该是这种情况。驱动程序将尝试连接到每个联系点,如果无法连接到任何联系点,则抛出异常。您可以通过SocketOptions.setConnectTimeoutMillis()控制驱动程序尝试连接(到每个节点)的最长时间(默认值为5秒)。
我的经验是,如果没有节点可以连接,Cluster.build()确实会返回异常,但是如果您的体验不同,您可能希望将其报告为错误(但有关如何重现此更多细节)会有所帮助。)
话虽如此: