Java 在另一个库中配置ActorSystem
我的应用程序使用一个库,该库在内部初始化一个actor系统,如下所示Java 在另一个库中配置ActorSystem,java,scala,akka,typesafe-config,Java,Scala,Akka,Typesafe Config,我的应用程序使用一个库,该库在内部初始化一个actor系统,如下所示 ActorSystem("MySys") 因此,MySysactor系统使用默认的调度程序。我想为这个特定的actor系统使用一个定制的调度程序。如何在我的application.conf中重写此libraray的actor系统使用的调度程序 我已经试过这样做了 MySys { akka { actor { default-dispatcher = "my-dispatcher" }
ActorSystem("MySys")
因此,MySys
actor系统使用默认的调度程序。我想为这个特定的actor系统使用一个定制的调度程序。如何在我的application.conf
中重写此libraray的actor系统使用的调度程序
我已经试过这样做了
MySys {
akka {
actor {
default-dispatcher = "my-dispatcher"
}
my-dispatcher {
type = Dispatcher
executor = "thread-pool-executor"
thread-pool-executor {
fixed-pool-size = 85
}
}
}
}
但是,这不起作用,因为线程转储显示以下输出
"MySys-akka.actor.default-dispatcher-6" #396 prio=5 os_prio=0 tid=0x00007f54501b6000 nid=0x1a6 waiting on condition [0x00007f55285f3000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000e4b5b1f0> (a akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinPool)
at akka.dispatch.forkjoin.ForkJoinPool.scan(ForkJoinPool.java:2075)
at akka.dispatch.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
at akka.dispatch.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
"MySys-akka.actor.default-dispatcher-5" #363 prio=5 os_prio=0 tid=0x00007f545c006800 nid=0x185 waiting on condition [0x00007f5443acf000]
java.lang.Thread.State: TIMED_WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000e4b5b1f0> (a akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinPool)
at akka.dispatch.forkjoin.ForkJoinPool.idleAwaitWork(ForkJoinPool.java:2135)
at akka.dispatch.forkjoin.ForkJoinPool.scan(ForkJoinPool.java:2067)
at akka.dispatch.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
at akka.dispatch.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
"MySys-akka.actor.default-dispatcher-4" #362 prio=5 os_prio=0 tid=0x00007f55402e0000 nid=0x184 waiting on condition [0x00007f54445da000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000e4b5b1f0> (a akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinPool)
at akka.dispatch.forkjoin.ForkJoinPool.scan(ForkJoinPool.java:2075)
at akka.dispatch.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
at akka.dispatch.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
"MySys-akka.actor.default-dispatcher-3" #361 prio=5 os_prio=0 tid=0x00007f55402df000 nid=0x183 waiting on condition [0x00007f5539774000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000e4b5b1f0> (a akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinPool)
at akka.dispatch.forkjoin.ForkJoinPool.scan(ForkJoinPool.java:2075)
at akka.dispatch.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
at akka.dispatch.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
"MySys-akka.actor.default-dispatcher-2" #360 prio=5 os_prio=0 tid=0x00007f55402de800 nid=0x182 waiting on condition [0x00007f5440f31000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000e4b5b1f0> (a akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinPool)
at akka.dispatch.forkjoin.ForkJoinPool.scan(ForkJoinPool.java:2075)
at akka.dispatch.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
at akka.dispatch.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
"MySys-scheduler-1" #359 prio=5 os_prio=0 tid=0x00007f55402dd800 nid=0x181 waiting on condition [0x00007f54440d5000]
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.sleep(Native Method)
at akka.actor.LightArrayRevolverScheduler.waitNanos(LightArrayRevolverScheduler.scala:85)
at akka.actor.LightArrayRevolverScheduler$$anon$4.nextTick(LightArrayRevolverScheduler.scala:265)
at akka.actor.LightArrayRevolverScheduler$$anon$4.run(LightArrayRevolverScheduler.scala:235)
at java.lang.Thread.run(Thread.java:748)
“MySys akka.actor.default-dispatcher-6”#396 prio=5 os_prio=0 tid=0x00007f54501b6000 nid=0x1a6等待条件[0x00007f55285f3000]
java.lang.Thread.State:等待(停车)
在sun.misc.Unsafe.park(本机方法)
-停车等待(akka.dispatch.ForkJoinExecutor配置程序$AkkaForkJoinPool)
位于akka.dispatch.forkjoin.ForkJoinPool.scan(ForkJoinPool.java:2075)
位于akka.dispatch.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
在akka.dispatch.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
“MySys akka.actor.default-dispatcher-5”#363 prio=5 os#u prio=0 tid=0x00007f545c006800 nid=0x185等待条件[0x00007f5443acf000]
java.lang.Thread.State:定时等待(停车)
在sun.misc.Unsafe.park(本机方法)
-停车等待(akka.dispatch.ForkJoinExecutor配置程序$AkkaForkJoinPool)
位于akka.dispatch.forkjoin.ForkJoinPool.idleAwaitWork(ForkJoinPool.java:2135)
位于akka.dispatch.forkjoin.ForkJoinPool.scan(ForkJoinPool.java:2067)
位于akka.dispatch.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
在akka.dispatch.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
“MySys akka.actor.default-dispatcher-4”#362 prio=5 os#u prio=0 tid=0x00007F554020000 nid=0x184等待条件[0x00007F5445DA000]
java.lang.Thread.State:等待(停车)
在sun.misc.Unsafe.park(本机方法)
-停车等待(akka.dispatch.ForkJoinExecutor配置程序$AkkaForkJoinPool)
位于akka.dispatch.forkjoin.ForkJoinPool.scan(ForkJoinPool.java:2075)
位于akka.dispatch.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
在akka.dispatch.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
“MySys akka.actor.default-dispatcher-3”#361 prio=5 os#u prio=0 tid=0x00007F55402DF000NID=0x183等待条件[0x00007f5539774000]
java.lang.Thread.State:等待(停车)
在sun.misc.Unsafe.park(本机方法)
-停车等待(akka.dispatch.ForkJoinExecutor配置程序$AkkaForkJoinPool)
位于akka.dispatch.forkjoin.ForkJoinPool.scan(ForkJoinPool.java:2075)
位于akka.dispatch.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
在akka.dispatch.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
“MySys akka.actor.default-dispatcher-2”#360 prio=5 os_prio=0 tid=0x00007f55402de800 nid=0x182等待条件[0x00007f5440f31000]
java.lang.Thread.State:等待(停车)
在sun.misc.Unsafe.park(本机方法)
-停车等待(akka.dispatch.ForkJoinExecutor配置程序$AkkaForkJoinPool)
位于akka.dispatch.forkjoin.ForkJoinPool.scan(ForkJoinPool.java:2075)
位于akka.dispatch.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
在akka.dispatch.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
“MySys-scheduler-1”359优先级=5 os_优先级=0 tid=0x00007f55402dd800 nid=0x181等待条件[0x00007f54440d5000]
java.lang.Thread.State:定时等待(休眠)
位于java.lang.Thread.sleep(本机方法)
在akka.actor.LightArrayRevolverScheduler.waitNanos(LightArrayRevolverScheduler.scala:85)
在akka.actor.LightArrayRevolverScheduler$$anon$4.nextTick(LightArrayRevolverScheduler.scala:265)
在akka.actor.LightArrayRevolverScheduler$$anon$4.run(LightArrayRevolverScheduler.scala:235)
运行(Thread.java:748)
如果在构建新ActorSystem时未传递任何配置,则将使用根配置(即akka密钥内的所有配置)
在中,建议您通过使用单独的配置专门初始化同一应用程序中的两个不同参与者系统来初始化它们
val config = ConfigFactory.load()
val system1 = ActorSystem("MySys", config.getConfig("MySys"))
val system2 = ActorSystem("my-app", config.getConfig("my-app"))
如果您无法影响第一个系统的创建方式,我建议您在MySys的配置中使用默认的akka区域,然后为您的应用程序命名所需的配置