Datastax Cassandra驱动程序重试策略延迟?

Datastax Cassandra驱动程序重试策略延迟?,cassandra,datastax-java-driver,Cassandra,Datastax Java Driver,我正在使用Datastax Cassandra驱动程序,并设置了RetryPolicy,以便在主机不可用时重试。但是,我注意到它会尽可能快地重试。我想将其更改为在重试之间增加延迟,而不是在集群陷入困境时重击集群。这对于过载的请求错误尤其重要,因为我确实希望在这些场景中重试,但会有很大的延迟 哪里是实施延迟的正确地点,什么是正确的机制?我应该在我的RetryPolicy中抛出一个线程.sleep(…) 我不介意在有线插槽上接收请求(接近最大的机内请求数),但如果我们还没有达到机内请求限制,我不同意

我正在使用Datastax Cassandra驱动程序,并设置了RetryPolicy,以便在主机不可用时重试。但是,我注意到它会尽可能快地重试。我想将其更改为在重试之间增加延迟,而不是在集群陷入困境时重击集群。这对于
过载的
请求错误尤其重要,因为我确实希望在这些场景中重试,但会有很大的延迟

哪里是实施延迟的正确地点,什么是正确的机制?我应该在我的RetryPolicy中抛出一个
线程.sleep(…)


我不介意在有线插槽上接收请求(接近最大的机内请求数),但如果我们还没有达到机内请求限制,我不同意完全阻止其他写入。

您可以通过添加延迟来实施自己的重试策略。最简单的方法是选择默认重试的源代码,并自己修改它以实现重试的指数延迟或类似的功能


对于指数延迟,只需查看的源代码即可了解其工作原理

您可以通过添加延迟来实现自己的重试策略。最简单的方法是选择默认重试的源代码,并自己修改它以实现重试的指数延迟或类似的功能


对于指数延迟,只需查看的源代码即可了解其工作原理

我已经设置了指数重新连接策略,但它似乎不用于超时重试决策。也许它用于不可用的决策,尽管看起来不是这样。指数重连接策略的工作方式是要求实现者提供超时,然后Cassandra管理延迟。在RetryDecisions的情况下,我似乎没有提供延迟的选项,因此我必须
Thread.sleep()
。我担心在重试策略中睡觉是错误的,因为它可能会阻止请求线程。好吧,RetryPolicy!=重新连接策略。。。只需创建您自己的指数RetryPolicy您对在RetryPolicy中睡眠的担忧是有效的,重试是在Netty worker中进行评估的,因此如果您在任何on*方法中睡眠,它将阻止Netty worker线程。@AndyTolbert您能详细说明阻止Netty worker的后果吗?您对如何延迟有什么建议吗?阻止一个网络工作者既可以防止网络套接字上的写操作,也可以防止网络套接字上的读操作。我认为这使得通过RetryPolicy使用延迟成为不可能。相反,最好的方法是处理客户端代码中的异常,并计划在该级别重试session.execute。我已经有了一个指数重新连接策略设置,但似乎在超时重试决定的情况下没有使用它。也许它用于不可用的决策,尽管看起来不是这样。指数重连接策略的工作方式是要求实现者提供超时,然后Cassandra管理延迟。在RetryDecisions的情况下,我似乎没有提供延迟的选项,因此我必须
Thread.sleep()
。我担心在重试策略中睡觉是错误的,因为它可能会阻止请求线程。好吧,RetryPolicy!=重新连接策略。。。只需创建您自己的指数RetryPolicy您对在RetryPolicy中睡眠的担忧是有效的,重试是在Netty worker中进行评估的,因此如果您在任何on*方法中睡眠,它将阻止Netty worker线程。@AndyTolbert您能详细说明阻止Netty worker的后果吗?您对如何延迟有什么建议吗?阻止一个网络工作者既可以防止网络套接字上的写操作,也可以防止网络套接字上的读操作。我认为这使得通过RetryPolicy使用延迟成为不可能。相反,最好的方法是处理客户机代码中的异常,并计划在该级别重试session.execute。