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

Scala, ZIO - retry if data is not inserted into cassandra database

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

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

我用它来将相同的数据添加到相同类型的两个 tables:

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

我的问题是,如果第一次失败,我应该如何更改此代码以重试插入 table?我不想在 tables 中有不一致的数据,所以如果它在插入到第一个 table 后失败,我想重试它然后插入到第二个 table 并在那里重试直到它添加为在 tables

中具有完全相同的数据

您可以调用retry on effects 并提交重试策略。

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

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