我正在使用Datastax Cassandra驱动程序,并在主机不可用时重试RetryPolicy . 但是,我注意到它尽可能快地重试 . 我想改变它,以便在重试之间有一个越来越大的延迟,而不是在它正在挣扎时锤击集群 . 这对于 OVERLOADED
请求错误尤其重要,因为我确实想在这些情况下重试,但是会有很长的延迟 .
延迟的正确位置在哪里,什么是正确的机制?我应该在我的RetryPolicy中抛出 Thread.sleep(...)
吗?
我不介意在线上插槽请求(朝向最大飞行请求数)但如果我们还没有达到飞行中的请求限制,我不能完全阻止其他写入 .
1 回答
您可以通过添加延迟来实施自己的重试策略 . 最简单的方法是选择默认重试的源代码并自己修改它以实现重试或类似的指数延迟 .
对于指数延迟,只需查看http://docs.datastax.com/en/drivers/java/3.0/com/datastax/driver/core/policies/ExponentialReconnectionPolicy.html的源代码即可查看其工作原理