Akka流:使用持久性队列或事件源

Akka流:使用持久性队列或事件源,akka,akka-stream,akka-persistence,Akka,Akka Stream,Akka Persistence,在Akka流应用程序中,如果应用程序崩溃/节点宕机,我将承担丢失正在运行的消息的风险 我们可以做些什么来确保我们不会丢失消息,并且在应用程序返回后会播放这些消息 在我的应用程序中,mapAsyns执行IO调用和一些CPU受限的小任务 在纯Akka应用程序中,我将选择持久队列或事件源。但是在Akka流的情况下,由于我无法访问底层队列,如何确保流中的消息不会丢失?如果流崩溃,您需要检查流接收器,然后根据上次成功的检查点恢复源。您可以使用您提到的持久队列或事件源进行检查点和恢复。如此有效,如果我的源不

在Akka流应用程序中,如果应用程序崩溃/节点宕机,我将承担丢失正在运行的消息的风险

我们可以做些什么来确保我们不会丢失消息,并且在应用程序返回后会播放这些消息

在我的应用程序中,mapAsyns执行IO调用和一些CPU受限的小任务


在纯Akka应用程序中,我将选择持久队列或事件源。但是在Akka流的情况下,由于我无法访问底层队列,如何确保流中的消息不会丢失?

如果流崩溃,您需要检查流接收器,然后根据上次成功的检查点恢复源。您可以使用您提到的持久队列或事件源进行检查点和恢复。

如此有效,如果我的源不支持replay,我将需要自定义构建一个从真实源(如Rabbit MQ或Kinesis)获取数据并将其推送到持久存储!在具体化流时,我还需要自定义逻辑,以确保将源代码重置为检查点。我怎样才能使这更一般化,并说我让流程中的每个阶段都尽最大努力交付一次(我知道尽最大努力不会与交付一起交付一次,但你可能会明白这一点)?好吧,如果你的源代码不是事务性的,你将不得不以任何方式构建事务,对吗?如果您可以延迟阻止读取,或者以其他方式确认它,那么您可以使用流读取它,将其写入持久参与者,并且只有在完成所有操作后才能取消阻止ack。