scala - 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))
.
您可以将调度程序与&&
(and) 或||
(or) 运算符结合使用。
还有专门针对效果的重试方法,例如retryN(n: Int)
.
也许其中之一适合您的需求。
推荐阅读
- amazon-web-services - AWS 下推谓词在读取 HIVE 分区时不起作用
- python - 检查集合是否是集合/多集合列表的子集
- azure - 直接法和设备法有什么区别?
- nltk - 如何检查wordnet是否已经安装?
- java - 弹簧靴未根据配置文件读取正确的属性
- c# - “不兼容的平台错误”构建 MSI
- redux - 为什么组件没有连接到 redux 商店?
- python - 如何从javascript代码中提取字符串?
- kubernetes - Calico CNI pod 网络无法跨 EKS Kubernetes 工作节点上的不同主机工作
- java - 应该包含/导入什么来识别我的 spark -java 代码中的“$”操作连接功能?