我如何创建演员来表达akka的层次结构?

问题描述 投票:1回答:1

我最近开始使用akka事件源/集群分片进行开发,由于有了在线资源,我认为我了解了基本概念以及如何使用它创建简单的应用程序。但是,我正在努力将这种方法应用于稍微复杂的数据结构中:

作为示例,让我们考虑网页和URL。每个页面都可以用集群中的一个actor表示(具有其唯一的ID作为页面的路径,例如/ questions / 60037683)。

在每个页面上我都可以发出命令,例如

  • 创建页面(因此如果该页面不存在,将创建它)
  • 编辑页面(编辑页面的详细信息)
  • 获取页面内容(和子页面)

向单个页面发布命令时,一切都很容易,因为它是“手动编写”。但是我增加了网页可以有子级的复杂性,因此在创建“子级页面”时,我需要父级来更新对其子级的引用。

我想到了一些可能的方法,但感觉不完整。

  • 将所有事件发送到单个WebPage并在创建页面时,找到父页面(如果有)并告知已添加新的子项
  • 将所有事件发送到单个WebPage,并在创建页面时,将消息发送给父级,然后它将创建一个新的命令来告诉子级进行初始化
  • 创建一个作为WebPageRepository的基础结构,它将跟踪页面树并将CRUD命令中继到所有Web页面参与者。

我认为,我的真正问题是,在将消息传递给必须实际执行任务的其他参与者时,要正确处理期货的回报。

我很困惑,一些阅读资源将不胜感激。

感谢您的时间。

编辑:第一个版本正在谈论类通用的类文件系统结构。我更新了真实目的,网页和网址,并试图更好地阐明我的问题

scala akka event-sourcing akka-cluster
1个回答
0
投票

[经过几个月的搜索,我得出的结论是,我正在做的是尝试使参与者具有事务性的行为,以便在创建某些对象时,父对象也以安全的方式进行更新,这意味着如果某个操作失败,所有成功完成的操作都将回滚。我认为,最好的模式是佐贺模式,它为整个过程增加了一些复杂性,但从长远来看,它可以满足我的需要。

基本上,我最终将主角实现为一个独立的部分(应该如此),可以接收创建命令并添加子命令。

然后有一个传奇演员负责创建内容,将子代添加到父代,如果在此过程中出现故障,则回滚所有内容。

如果其他人有更好的解决方案,我会很高兴听到它的声音

© www.soinside.com 2019 - 2024. All rights reserved.