Scala、ZIO - 如果数据未插入 cassandra 数据库,则重试

问题描述

我有一个简单的方法可以将数据添加到 Cassandra 数据库中:

 def addData(data: SomeData): Task[Either[Exception,Unit]]

我用它向两个相同类型的表添加相同的数据:

for {
 persistOneTable <- repo.addData(data).mapError(SomeError(_))
 persistSecondTable <- repo2.addData(data).mapError(SomeError(_))
} yield ()

我的问题是,如果第一次失败,我应该如何更改此代码以重试插入到表中?我不想在表中有不一致的数据,所以如果它在插入到第一个表后失败,我想重试它然后插入到第二个表并重试直到它被添加到两个表中具有完全相同的数据

解决方法

您可以在效果上调用 retry 并移交重试策略。

例如addData(data).retry(policy = Schedule.recurs(5))
您可以将调度程序与 &&(和)或 ||(或)运算符结合使用。

对于retryN(n: Int)等效果也有专门的重试方法。
也许其中之一符合您的需求。