使用Akka Persistence和Extra-Cameo模式至少一次交付

ric*_*din 8 akka reliable-message-delivery akka-persistence

我正在开发一个使用Akka的应用程序,其中Actors旨在避免请求 - 响应模式.使用Extra或Cameo模式可以将actor之间的交互建模为消息的"流".

下图总结了这些演员的架构.

Actorbase通信模型

Cameo模式用于处理来自SK演员的响应.

现在,假设我要保证在-至少一次的语义SFSK演员.我怎样才能做到这一点?使用Akka持久性实现ato语义需要在这些actor之间实现请求 - 响应模式.

如何确保使用Cameo处理响应的actor之间至少有一次语义?

非常感谢

ric*_*din 0

杰米·艾伦 (Jamie Allen) 在 Twitter 上帮助我回答了这个问题。推特对话是这样的

\n

我尝试总结一下杰米所说的讨论。

\n
\n

对于可靠的至少一次,使用 Akka Cluster 和 Persistence 来完成它是可能的,但可能有点过头了。我说尽量保持简单。拥有请求的 GUID,并将其与请求一起发送到三个 SK。

\n

在不可变账本场景中,您偶尔会通过 GUID 清除账本以消除重复项。数据需要的一致性程度将决定这一点。

\n

简单性将更容易维护并避免部分失败。您可以通过以下几种方法之一在 SK 端处理幂等性:或者在通过过期缓存处理请求时跟踪所有 GUID,或者将具有不可变更新的 GUID 存储在分类帐中。

\n
\n

因此,在这种情况下,更好的解决方案是完全删除 Akka Persistence,并将问题减少到良好的旧消息传递。

\n

SFSKs 参与者发送消息,Cameo 节点等待SKs 响应。如果此类反应未在预定的时间窗口内到达,Cameo 节点会SF使用超时消息发出警报。SF再次向 SK 演员重新发送消息。

\n

代表上述解决方案的图表如下。

\n

客串与自制至少一次交付

\n

标有数字 5 的红色消息模拟了超时消息。

\n

正如杰米所说:

\n
\n

我认为 ACK 必须是调用者的责任,一直回到原始请求的发送者。那\xe2\x80\x99是最安全和最简单的方法。

\n
\n

希望能帮助到你。

\n