Akka、线程调度程序、代理最佳实践

Akka、线程调度程序、代理最佳实践,akka,fsm,stm,Akka,Fsm,Stm,我涉猎了Scala一段时间,从远处研究了Akka,最后我投入了其中。FSM为我敲定了交易。我担心的是,我可能已经想到了如何不适当地共享数据,并且我可能已经错误地想到了事件处理循环以匹配Akka最佳实践 在我的问题中,我有一个中央协调器,负责将传入的任务请求匹配到适当的参与者,这些参与者也是有限状态机。我最初假设onTransition不仅提供州名称,还提供州数据 我想传统的数据封装将是不向侦听器公开数据的原因。但对我来说,我有两个用途让其他人看到这些数据 状态数据包含一个底层域对象,其属性用于根

我涉猎了Scala一段时间,从远处研究了Akka,最后我投入了其中。FSM为我敲定了交易。我担心的是,我可能已经想到了如何不适当地共享数据,并且我可能已经错误地想到了事件处理循环以匹配Akka最佳实践

在我的问题中,我有一个中央协调器,负责将传入的任务请求匹配到适当的参与者,这些参与者也是有限状态机。我最初假设onTransition不仅提供州名称,还提供州数据

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

状态数据包含一个底层域对象,其属性用于根据作业的需求确定哪些参与者是处理作业的最佳人选。由于工作要求是动态的,所以我不太愿意单独收集工人演员(尽管我不知道为什么这会让我停顿)

询问所有满足其他先决条件的独立参与者并加入他们的所有回复的想法感觉效率低下,或者至少对阿克卡来说不习惯。我还需要在UI中显示当前状态,并且没有理由使用相同的事件队列来查看状态

不管怎么说,我正在考虑让FSM更新一个代理,但由于这是一个演员本身,我不确定间接层给我带来了什么,这可能会使对事件顺序的推理更加困难

Fowler的事件协作让我明确地发送状态数据,但我希望对于自动更新状态数据的所有转换,有一种更简单的方法可以做到这一点

我也很难理解事件级联的顺序,以及我是否需要控制它。即使所有传入的外部事件都通过一个参与者完成,我也希望在处理下一个外部事件之前,将所有内部生成的事件处理给所有其他参与者。我正在考虑让中央协调员使用!!等待响应,但我担心如果意外删除事件链中的某个感叹号,我将失去该保证

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


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

我建议将状态更改发布到总线,以便侦听器可以注册更新