在 ZIO 循环中组合重试和重复时重置指数计划
Reset exponential Schedule when combining retry and repeat in a ZIO loop
我在长轮询过程中结合了 ZIO 重试和重复:
logic.repeat(repeatSchedule).retry(retrySchedule)
其中 logic 是一个可能会失败的 ZIO。
由于retrySchedule
可以指数退避,它可以根据错误无限增长,但是,我想在逻辑成功时将其重置为初始值(将无限重复)
我正在关注 ZIO Scheduling doc 中关于 Schedule
组合的部分,但我错过了一个“递归”组合,其中可能有如下内容:
Schedule.exponential(baseDelay)
.whileOutput(_ < UpdaterManagerSettings.maxDelay)
.andThen([SOMETHING TO POINT RECURSIVELY AT THE SAME])
我认为这样的事情可能对你有用:
val logic = ZIO(???)
// First, create an effect that uses exponential backoff to retry logic.
// This effect will complete as soon as logic succeeds,
// or maximum number of retries is exceeded.
val retrySchedule = Schedule.exponential(baseDelay) && Schedule.recurs(maxRetries)
val retriedLogic = logic.retry(retrySchedule)
// Then, repeat the whole retriedLogic infinitely.
val repeatSchedule = Schedule.spaced(1.second)
val wholeProcedure = retriedLogic.repeat(repeatSchedule)
只要逻辑失败,就会使用指数退避重试。但是一旦成功,它就会以固定的时间间隔重复。如果再次失败,指数退避从 baseDelay
.
再次开始
在此处查看 运行 示例:https://scastie.scala-lang.org/yZpBO34NRgK6BgYYIzk5Iw
我在长轮询过程中结合了 ZIO 重试和重复:
logic.repeat(repeatSchedule).retry(retrySchedule)
其中 logic 是一个可能会失败的 ZIO。
由于retrySchedule
可以指数退避,它可以根据错误无限增长,但是,我想在逻辑成功时将其重置为初始值(将无限重复)
我正在关注 ZIO Scheduling doc 中关于 Schedule
组合的部分,但我错过了一个“递归”组合,其中可能有如下内容:
Schedule.exponential(baseDelay)
.whileOutput(_ < UpdaterManagerSettings.maxDelay)
.andThen([SOMETHING TO POINT RECURSIVELY AT THE SAME])
我认为这样的事情可能对你有用:
val logic = ZIO(???)
// First, create an effect that uses exponential backoff to retry logic.
// This effect will complete as soon as logic succeeds,
// or maximum number of retries is exceeded.
val retrySchedule = Schedule.exponential(baseDelay) && Schedule.recurs(maxRetries)
val retriedLogic = logic.retry(retrySchedule)
// Then, repeat the whole retriedLogic infinitely.
val repeatSchedule = Schedule.spaced(1.second)
val wholeProcedure = retriedLogic.repeat(repeatSchedule)
只要逻辑失败,就会使用指数退避重试。但是一旦成功,它就会以固定的时间间隔重复。如果再次失败,指数退避从 baseDelay
.
在此处查看 运行 示例:https://scastie.scala-lang.org/yZpBO34NRgK6BgYYIzk5Iw