首页 > 解决方案 > 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 ()

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

标签: scalacassandranosqlscala-catszio

解决方案


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

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

还有专门针对效果的重试方法,例如retryN(n: Int).
也许其中之一适合您的需求。


推荐阅读