2017-04-08 68 views
0

我有一個使用Akka actor在java上構建的應用程序。最近我遇到了與並行相關的性能問題。我經歷了Google,發現我們可以爲演員分配定製/固定調度員/執行者。在演員創作時,我已經爲演員姓名添加了唯一ID的演員命名。當用UUID命名時定義akka actor的調度程序

是否有一種方法來指定我的演員使用固定調度器時,演員名稱附加了唯一的ID。

我試圖更新application.conf如下,並沒有得到預期的結果。它仍然使用默認調度程序。

我的演員們在阿卡://應用/用戶/演員

akka.actor.deployment { 
    "/actorName*" { 
     dispatcher = mycustom-dispatcher 
    } 
} 

引用我用:http://doc.akka.io/docs/akka/2.1.4/java/dispatchers.html#Setting_the_dispatcher_for_an_Actor

+0

最新的配置參考(http://doc.akka.io/docs/akka/2.4.17/java/dispatchers.html)在其示例中沒有通配符*。你沒有嘗試過嗎?你確定在任何地方都沒有拼寫錯誤嗎?你如何確認它仍然使用默認的? –

+0

@Diego,確認演員使用默認調度員的日誌。 –

回答

0

是的,你可以明確分配調度到你的演員[S]。

import akka.actor.Props 
val myActor = 
    context.actorOf(Props[MyActor].withDispatcher("my-dispatcher"), "myactor1") 

或Java變種:

ActorRef myActor = 
    system.actorOf(Props.create(MyUntypedActor.class).withDispatcher("my-dispatcher"), 
    "myactor3"); 

與配置

my-dispatcher { 
    executor = "thread-pool-executor" 
    type = PinnedDispatcher 
} 

檢查更多的akka-docs

+0

我正在尋找一個沒有觸及演員的選項。有沒有辦法通過配置來提及? –

0
akka.actor.deployment { 
    "/actorName*" { 
    dispatcher = mycustom-dispatcher 
    } 
} 

以上不工作,因爲(從documentation):

  • 通配符不能用部分匹配部分,如下所示:/foo*/bar/f*o/bar

你可以,但是,使用通配符來在演員層次一定級別相匹配的所有演員。例如,假設您要使用自定義調度程序的所有參與者都生活在akka://application/user/someParent/之下。然後,您可以配置所有someParent的直接孩子的方式如下:

akka.actor.deployment { 
    "/someParent/*" { 
    dispatcher = mycustom-dispatcher 
    } 
} 

閱讀鏈接的文檔更多的選擇。