繁体   English   中英

在Akka的执着演员中,创造一个被认为是副作用的儿童演员,还是创造国家?

In Akka's persistent actor, is creating a child actor considered to be a side effect, or the creation of state?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

这个问题并不像标题所暗示的那样具有哲学性。 考虑以下持久性方法:

执行操作的命令来自各种客户端。 我将操作和客户都表示为持久的角色。 客户端的状态是要通过的lastOperationId。 Operation的状态几乎是操作进度的FSM(它实际上是一个Saga,因为它需要接触到ActorSystem外部的其他系统才能通过它的状态)。

接收者接收操作命令,其包含客户端ID和操作ID。 Reception actor创建或检索Client actor并将其转发给命令。 Client actor读取并验证操作命令,持久化它,创建OperationReceived事件,使用此操作id更新其自己的状态。 现在需要创建一个新的Operation actor来管理新的长期运行操作。 但这里是我迷路的地方,文档和各种博客中的所有好例子都无济于事。 大多数评论员说PersistentActor将命令转换为事件,然后更新其状态。 只要在重放期间不调用它们,它们也可能具有副作用。 所以我有两个困惑的领域:

  1. 在此上下文中创建操作actor是否等同于创建状态或执行副作用? 它似乎不是副作用,但同时它不会改变自己的状态,而是导致新孩子的状态改变。
  2. 我是否应该构建一个Command来发送给新的Operation actor,或者我只是将它转发给OperationReceived事件?

如果我假设创建一个儿童演员不是副作用,那就意味着我还必须在重播时创建一个孩子。 这反过来会导致孩子的状态得以恢复。

我希望潜在的问题是明确的。 我觉得这是一个普遍的问题,但我能够制定它的最好方法是给出一个具体的例子。

编辑 :经过反思,我认为从另一个创建一个持久的演员是一种创造国家的行为,虽然是外包的。 这意味着触发创建的事件将在后续重放时触发该创建(这将导致检索子项自己的持久状态)。 这使我认为传递事件(而不是包装命令)可能是最干净的事情,因为可以应用相同的事件来更新父和子中的状态。 当事件进入孩子时,应该没有必要坚持这个事件 - 它已经存在于父母身上并将重播。

1 个回复

经过反思,我认为从另一个角色创造一个持久的演员是一种创造国家的行为,虽然是外包的。 这意味着触发创建的事件将在后续重播时触发相同的创建。 这使我认为传递事件(而不是包装命令)可能是最干净的事情,因为可以应用相同的事件来更新父和子中的状态。 当事件进入孩子时,应该没有必要坚持这个事件 - 它已经存在于父母身上并将重播。

1 AKKA演员

1-有人可以解释一下,为什么在AKKA永久演员中,记录了事件后才进行状态更新? 1.1-如果在更新状态“回调”发生之前系统崩溃,将会发生什么? (我想我有点理解,但是我的困惑来自我无法理解命令的处理。我认为它与处理事件没有什么不同。请参阅下文) 2-命令的执行/处理 ...

3 在 Akka 中将实体保留为状态或子 Actor

考虑在线购物的用例,其中我有库存和商品。 我看到有几个选项可以使用 Akka 演员对此进行建模。 例如,创建一个名为 Inventory 的持久参与者,将项目保持在其状态中的列表中。 创建一个名为 Inventory 的角色,然后为每个项目创建一个子持久角色。 每个项目保持自己的状态。 ...

4 Akka演员创作问题

我正在尝试创建一个可以远程和本地访问的actor。 下面创建的actor引发异常。 任何想法? val myLocalActor2 = system.actorOf(Props[ActorNodes], name = "akka://JtsSystem@127.0.0.1:2552/My ...

2012-05-18 23:04:42 2 778   akka
5 嘲笑阿卡的儿童演员

我正在尝试为我的演员编写单元测试,并坚持基本的模拟。 PriceAggregateActor正在使用akka持久性,我不想为它传递所有的conf并且想要完全嘲笑它。 这是我要测试的演员 所以在我的测试中,我正在尝试做类似的事情: 我总是得到: 为什么抱怨mocke ...

6 阿卡演员儿童烦恼

我对此案感到非常惊讶。 有什么想法为什么会这样吗? 每次都可以正常工作: 如果孩子不存在,我们是演员。 然后发送Ping消息。 这有时挂在演员已经存在的情况下: 为什么? ...

7 Akka 持久演员 - 函数式方法

我一直在尝试用函数式方法来实现持久的actor——我的意思是根本没有变量。 但我遇到了麻烦:) 下面的代码示例无法正常工作,因为处理程序参数在处理程序之间不共享(receiveCommand/receiveRecover)。 两者都以零开头,然后相互覆盖 - 在重播某些事件后,命令处理程序仍将处于起 ...

8 何时使用AKKA持久演员

有人可以解释一下我,什么时候/必须使用永久演员? 有什么好处,它可以解决什么问题(普通演员无法解决)? ...

9 防止akka actor重启child actor

我试图让一个演员Worker不重新启动其童星SubWorker当它是由它自己的上司重启Mngr 。 我甚至重写后一直不成功preRestart()和postRestart的Worker 。 日志仍然显示SubWorker直到重新启动。 我是Akka和演员模特的新手,我不知道我做错了什么。 ...

10 Akka - 由需要自动创建的演员

我在Akka很新,也许没有说明其中的一些概念。 我正试图找到一种方法,如果邮箱超过某个限制,系统会自动创建新的actor实例。 是否也可以在远程节点上执行此操作? 任何评论都很高兴。 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM