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)
这样的效果,也有专门的重试方法。
也许其中之一符合您的需求。
我有一个简单的方法可以将数据添加到 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)
这样的效果,也有专门的重试方法。
也许其中之一符合您的需求。