永远重试所有主机重试策略?

时间:2016-02-22 18:00:30

标签: cassandra datastax-java-driver

我有一些必须写入Cassandra的数据。最初我认为只需为ReadTimeout,WriteTimeout,Unavailable和RequestError设置RetryPolicy就可以了。但是,我看到的唯一两个重试决策是tryNextHostretry

retry似乎永远尝试,但它一遍又一遍地尝试相同的主机。即使节点干净地离开集群并宣布其离开(将其范围的所有权移交给另一个节点),此重试策略似乎仍继续尝试发送到同一主机。

tryNextHost解决了这个问题,但似乎只尝试了每个主机一次然后放弃(让异常冒泡)。

我需要一个通过主机轮换的重试策略(或者至少在一个干净地离开群集时移动主机)但我可以设置永久重试。我调查编写自己的RetryDecision,但没有公共构造函数,即使我解决了这个问题,我也没有办法解决这个问题,因为它的构造函数非常有限。

如何永远重试轮换主机?

1 个答案:

答案 0 :(得分:2)

单靠

RetryPolicy不允许你这样做。所涉及的另一个组件是LoadBalancingPolicy,它确定将尝试哪些主机(换句话说,它会生成重复tryNextHost次调用将重复的序列。)

所以我猜你可以写一个返回无限迭代器的自定义负载均衡策略。但坦率地说,这很不寻常,你应该考虑可能永远循环的请求的含义。