2011-12-29 52 views
2

我是Akka新手,如果这是一个基本问题,我很抱歉。我不确定如何使用参与者来实现以下场景,或者如果它甚至可能(或可取的)。Akka演员仍在等待新消息时工作?

  • 我公司拥有一批参与者(即生产者)负责维护一些特定的状态的同时,在发生变化时所有这些通知另一位演员(即消费者)的。
  • 消费者需要反复运行某个任务,这是一项需要所有生产者的状态才能启动的任务。当它收到制片人的信息时,它也必须响应国家的变化。

在考虑Akka之前,我会推出自己的简单演员模型,每个演员都在自己的线程中运行。运行()方法,将监控事件队列,这样我就可以有消费者不断地做同样的事情到这一点:

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 

事件队列不跟我好坐的不断轮询,但它至少在事件之间的漫长任务中取得了进展。

有没有最好的方法来使用阿卡演员来实现这个?我可以实现向消费者发送消息(或者由消费者自己内部发送给消费者)的“心跳”来执行长时间运行任务的另一步骤,但是我不喜欢这样的想法,即从长期运行任务中的步骤持续时间不统一。我不想排队迭代,这使得它太忙,所以不能快速响应来自制作者的消息。但我也不想安排它太少,所以当它可能正在进展时,它闲置......

或者是使用并发性的数据流模型更适合于此(我的'已经准备好了)?在状态全部绑定之前,用户无法启动,因此使用数据流变量定义进程似乎很自然。但是,如果数据流变量只能绑定一次,从消费者那里获取状态的重复更新似乎并不合适。

回答

2

您可以让产品将更改发布到Akka EventBus,让消费者注册以侦听这些事件,然后当它具备所有需要时,它可以处理完整块或产生一个处理进程完整的大块。

+0

谢谢,这正是我需要的! – 2012-01-04 03:03:01