2013-02-22 72 views
1

我目前正在實施一個系統,爲Akka收到的消息調用API方法。這非常簡單,並且不涉及對Akka有深入瞭解的任何事情。Akka批處理/單項處理

實際的API雖然允許我們也提出批量請求(類似JSON-RPC批處理調用,這裏描述:http://www.jsonrpc.org/specification)。方法的返回值不會改變,但排隊會。

我的想法是檢查隊列中是否有多條消息,並且在一次API調用中一次處理所有消息,而不是單獨進行數百次(當然要分別回覆所有消息)。

Akka有可能嗎?

回答

2

沒有這樣的內置構造。你可以做的是在你的處理演員面前有一個配角演員。當配料角色得到新的回覆時,它開始建立一個批次。

處理器參與者可以詢問批處理actor何時準備處理下一批處理。此時,批處理執行者會在一條消息中發送迄今收集的所有消息。

當然,根據API調用的方式和時間,實際模式會有所不同。

但是在你開始建立這樣的模式之前,你應該實際測量性能。我個人更喜歡演員做精細的工作,而不是大塊。如果你在一次接受行動中做了太多工作,你可能會減少公平。

如果你能降低公平住潛在的(雖然不一定)更高的吞吐量,你應該看看默認調度員的「吞吐量」設置:

# Throughput defines the maximum number of messages to be 
# processed per actor before the thread jumps to the next actor. 
# Set to 1 for as fair as possible.