Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未处理消息的Akka持久性_Akka_Akka Persistence - Fatal编程技术网

未处理消息的Akka持久性

未处理消息的Akka持久性,akka,akka-persistence,Akka,Akka Persistence,在我的应用程序中,我有一个服务,可以发送电子邮件以响应各种用户事件。有一个持续的问题,即电子邮件发送将失败,由于某种原因,所以我们会删除该邮件,不尝试重试。此故障模型中包括正在关闭的JVM。规则是不应该出现重复的电子邮件,不发送电子邮件是非常不受欢迎的,但可以接受。基本上,我们应该能够重试,而不必担心重复 Akko持久化表面上是为了解决上述问题,但它似乎是为了存储所有消息,然后重放其中的一个子集以进行恢复 所需的行为是,当参与者恢复时,任何未处理的消息(包括发生故障时正在处理的消息)都将被重放。

在我的应用程序中,我有一个服务,可以发送电子邮件以响应各种用户事件。有一个持续的问题,即电子邮件发送将失败,由于某种原因,所以我们会删除该邮件,不尝试重试。此故障模型中包括正在关闭的JVM。规则是不应该出现重复的电子邮件,不发送电子邮件是非常不受欢迎的,但可以接受。基本上,我们应该能够重试,而不必担心重复

Akko持久化表面上是为了解决上述问题,但它似乎是为了存储所有消息,然后重放其中的一个子集以进行恢复

所需的行为是,当参与者恢复时,任何未处理的消息(包括发生故障时正在处理的消息)都将被重放。此外,如果系统被跳转,则会发送任何挂起的电子邮件

是否有我遗漏的Akka文档的某些部分,或者有一种简单的方法来完成上述内容


为了记录在案,我们正在评估Akka 2.4.8:

一次交付可能无法保证,但对于这种用例,您可能已经足够接近了

如果您在发送失败时收到异常或某种回调,并且您可以将其视为成功的确认,您可以这样做:

为每封邮件指定一个唯一的id,并保持一个持久的参与者状态,该状态由飞行中的邮件组成,只有在持久化了您将要发送邮件的事实后才发送邮件,当邮件已确认发送时,将其从飞行中删除

这将导致事件日志中出现两个域事件,如
mailssent
mailssendconfixed
。重新启动后,当actor replay完成时,您可以重新发送飞行中但未确认的邮件

当然,如果你想接受发送电子邮件时可能失败的所有其他事情,那么这将非常困难(例如,发送完成但邮件会反弹,因为电子邮件地址拼写错误)