【问题标题】:Scala, ZIO - retry if data is not inserted into cassandra databaseScala,ZIO - 如果数据未插入 cassandra 数据库,则重试
【发布时间】:2021-08-03 19:48:56
【问题描述】:

我有一个向 Cassandra 数据库添加数据的简单方法:

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

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

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

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

【问题讨论】:

  • 您是否只想在Task 失败时重试?还是Either 中的Exception 也表示应该重试?
  • 仅当Task 失败时。

标签: scala cassandra nosql scala-cats zio


【解决方案1】:

您可以致电retry 了解效果并移交重试策略。

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

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

【讨论】:

    猜你喜欢
    • 2019-11-17
    • 1970-01-01
    • 2023-04-07
    • 2020-03-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    • 2020-04-17
    • 2016-11-19
    相关资源
    最近更新 更多