If you want your program to run forever with automatic error recovery you can choose to run your program in a loop that will restart every certain amount of specified time with an exponential backoff then
ResilientStream is all you’re looking for.
For a given
Fs2 Rabbit program defined as
Stream[F, Unit], a resilient app will look as follow:
import cats.effect.IO import dev.profunktor.fs2rabbit.resiliency.ResilientStream import fs2._ import scala.concurrent.ExecutionContext import scala.concurrent.duration._ implicit val timer = IO.timer(ExecutionContext.global) val program: Stream[IO, Unit] = Stream.eval(IO.unit) ResilientStream.run(program, 1.second)
This program will run forever and in the case of failure it will be restarted after 1 second and then exponentially after 2 seconds, 4 seconds, 8 seconds, etc.
For a program defined as
F[Unit] see the equivalent
See the examples to learn more!