簡體   English   中英

Akka Config - application.conf - 設置Dispatcher和Router

[英]Akka Config - application.conf - Setting Dispatcher & Router

在Akka 2.2.0中,我有一個循環路由的Actor,我希望有一個自定義調度員坐在上面。

在我的application.conf我有;

durable-dispatcher {
  mailbox-type = akka.actor.mailbox.filebased.FileBasedMailboxType
}

akka.actor.deployment {
  /notificationServiceWorkers {
    dispatcher = durable-dispatcher
    router = round-robin
    nr-of-instances = 5
  }
}

現在當我嘗試創造這樣的演員時;

ActorRef notificationServiceWorkers = akka.actorOf(Props.create(NotificationServiceActor.class)
   .withRouter(new FromConfig()), "notificationServiceWorkers")

調度程序未從配置中獲取,它使用默認調度程序。

如果我刪除.withRouter ,Akka會為調度程序選擇配置就好了,但很明顯它不再路由了。

如果我像這樣添加.withDispatcher ;

ActorRef notificationServiceWorkers = akka.actorOf(Props.create(NotificationServiceActor.class)
       .withDispatcher("durable-dispatcher")
       .withRouter(new FromConfig()), "notificationServiceWorkers")

一切正常。 問題是(從doco中不清楚)如果我想從application.conf加載調度程序和路由器配置,那么為什么我需要在Props創建中提供這兩者? 這是一個錯誤嗎?

部署未被提取的原因是路由被創建為路由器的子節點,因此它們位於路徑notificationServiceWorkers/*

在深入了解LocalActorRefProvider中的Akka代碼時,您可以看到在actorOf內部,如果它是非路由的actor,它們只從部署配置中獲取調度程序。 我想他們有他們的理由,但對你來說意味着如果你打算使用路由器而你想要一個不同的調度員(默認調度員除外),你需要在Props明確使用withDispatcher實例,您將無法從配置中獲取它。 同樣,我不知道這是否是一個錯誤,但從他們的代碼的外觀來看,當它是一個路由的演員時,似乎他們故意不從配置中拉出來。

作為Roland Kuhn回答的補充,這是有效的:

"/notificationServiceWorkers/*" {
  dispatcher = durable-dispatcher
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM