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

时间:2018-01-11 06:54:10

标签: akka akka-persistence reliable-message-delivery

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

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

Actorbase communication model

实现Cameo模式以处理来自SK actor的响应。

现在,想象一下,我想保证SFSK个演员之间的 at-least-once 语义。我怎样才能做到这一点?使用Akka持久性实现 ato 语义需要在这些actor之间实现请求 - 响应模式。

如何确保使用Cameo处理响应的actor之间的 at-least-once 语义?

非常感谢

1 个答案:

答案 0 :(得分:0)

Jamie Allen帮助我在Twitter上回答这个问题。 Twitter对话是this

我试着总结杰米所说的讨论。

  

对于至少可靠的至少一次,使用Akka Cluster和Persistence来完成它是可能的,但可能是矫枉过正。我说试着保持简单。拥有请求的GUID,并将请求发送给三个SK。

     

在不可变的分类帐场景中,您偶尔会扫描分类帐以通过GUID删除重复项。数据需要的一致性将定义这一点。

     

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

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

SFSK个演员发送消息,Cameo节点等待SK个响应。如果此类反应未在预定的时间窗口内到达,则Cameo节点使用超时消息警告SFSF再次向SKs演员重新发送消息。

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

Cameo with home-made at-least-once delivery

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

正如杰米所说:

  

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

希望它有所帮助。