我有一些必须写入Cassandra的数据。最初我认为只需为ReadTimeout,WriteTimeout,Unavailable和RequestError设置RetryPolicy就可以了。但是,我看到的唯一两个重试决策是tryNextHost
和retry
。
retry
似乎永远尝试,但它一遍又一遍地尝试相同的主机。即使节点干净地离开集群并宣布其离开(将其范围的所有权移交给另一个节点),此重试策略似乎仍继续尝试发送到同一主机。
tryNextHost
解决了这个问题,但似乎只尝试了每个主机一次然后放弃(让异常冒泡)。
我需要一个通过主机轮换的重试策略(或者至少在一个干净地离开群集时移动主机)但我可以设置永久重试。我调查编写自己的RetryDecision,但没有公共构造函数,即使我解决了这个问题,我也没有办法解决这个问题,因为它的构造函数非常有限。
如何永远重试和轮换主机?
答案 0 :(得分:2)
RetryPolicy
不允许你这样做。所涉及的另一个组件是LoadBalancingPolicy,它确定将尝试哪些主机(换句话说,它会生成重复tryNextHost
次调用将重复的序列。)
所以我猜你可以写一个返回无限迭代器的自定义负载均衡策略。但坦率地说,这很不寻常,你应该考虑可能永远循环的请求的含义。