Akka,线程调度员,代理商最佳实践

时间:2011-10-10 22:05:05

标签: akka fsm stm

我已经涉足斯卡拉一段时间了,并且远远地研究了阿卡,并且终于陷入困境。密克罗尼西亚联邦的特质为我封锁了这笔交易。我担心的是,我可能已经想到了如何不恰当地共享数据,我可能已经错误地设想了事件处理循环以匹配Akka最佳实践。

在我的问题中,我有一个中央协调员,它将传入的任务请求与有限状态机的适当角色相匹配。我原先假设onTransition不仅会给出州名,还会给出状态数据。

我猜传统的数据封装将是不向侦听器公开数据的原因。但对我来说,我有两种用途可以让其他人看到这些数据。

状态数据包含一个基础域对象,其属性用于确定哪些actor是处理作业的最佳候选者。由于工作要求是动态的,我对工人演员的单独收藏犹豫不决(虽然我不确定为什么这会让我停下来。)

查询满足其他先决条件并加入所有答复的所有单独演员的想法感觉效率低下或至少不是阿卡的惯用语。我还需要在UI中显示当前状态,并且没有理由使用相同的事件队列来查看状态。

无论如何,我正在考虑将FSM更新为代理,但由于这是一个演员本身,我不确定那个间接层是什么给我买的,它可能会更难以推断事件的顺序。

Fowler的事件协作指示我明确发送状态数据,但我希望有一种更简单的方法来自动更新状态数据的所有转换。

我也很难围绕事件级联的排序,以及我是否需要控制它。即使我所有传入的外部事件都来自单个actor,我也希望在处理下一个外部事件之前将所有内部生成的事件处理给所有其他actor。我想让中央协调员使用!!等待回复,但我担心如果在事件链的某个地方意外删除了一个惊叹号,我将失去这种保证。

解决方案我正在考虑这个问题包括使用优先级事件,使内部事件被赋予更高的优先级,使用单个线程调度程序(可能有工作窃取?)为所有共享的“内部”参与者。

对于我正在尝试做的事情是否涉及最佳实践,或者我是否尝试做错事:)?

1 个答案:

答案 0 :(得分:0)

我建议将状态更改发布到总线,监听器可以在其中注册更新。

相关问题