2011-12-29 53 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