我是Akka的新手,如果这是一个基本问题,我会提前道歉。我不确定如何使用actor来实现以下场景,或者它是否可能(或者是可取的)。
在考虑Akka之前,我会推出自己的简单actor模型,每个actor都在自己的线程中运行。 run()方法会监视一个事件队列,所以我可以让消费者继续做类似的事情:
while not done
poll the event queue
if something was polled
process the event
if all state is available
do one step of the long running task
对事件队列的持续轮询并不适合我,但它至少在事件之间的长期任务上取得了进展。
有没有最好的方法来使用Akka演员实现这个?我可以实现一个“心跳”,它向消费者发送消息(或者自己内部发送给消费者)再做另一个长时间运行任务的一步,但我不喜欢安排它的想法,因为长时间运行任务中的步骤持续时间不一致。我不想排队使其过于繁忙的迭代,以免快速响应来自生产者的消息。但我也不想太频繁地安排它,所以当它可能取得进展时它会闲置......
或者更适合使用Dataflow的并发模型(我只准备好了)?消费者无法启动,直到状态全部被绑定,所以它根据数据流变量定义过程似乎很自然。但是,如果Dataflow变量只能绑定一次,那么从消费者那里获得状态的重复更新似乎不合适。
答案 0 :(得分:2)
您可以让产品将更改发布到Akka EventBus,让消费者注册以监听这些事件,然后当它满足所有需要时,它可以处理完整的块,或者产生一个新的处理完整块的actor。