gpt4 book ai didi

scala - Akka Scheduler 仅在 MicroKernel 中引发异常,但在 Eclipse IDE for Scala 中运行良好

转载 作者:行者123 更新时间:2023-12-04 04:48:00 27 4
gpt4 key购买 nike

我有一个如下所示的调度程序。它旨在每 30 分钟向 Actor 系统中的另一个 Actor 发送一条消息。当我在 Eclipse IDE 中为 Scala 运行它时,此代码工作正常。
但是,当我在 MicroKernel 中抛出此代码(使用可引导的,以便 Microkernel 可以调用它)时,我收到一个异常说

java.lang.NoSuchMethodError: akka.actor.ActorSystem.dispatcher()Lscala/concurrent/ExecutionContext;
下面给出了完整的堆栈跟踪。
我怀疑该问题可能与在此上下文中无效的“import system.dispatcher”行有关。或者调度程序试图过早地触发消息。

请帮助...

scheduler.scala:

import akka.actor.Actor
import akka.actor.Props
import scala.concurrent.duration._
import akka.actor._
import java.sql.Timestamp;
import java.util.Date;

class Scheduler extends Actor with ActorLogging {
import transactions._

val system = ActorSystem("Daemon")
import system.dispatcher
log.info("Scheduler initializing.")
system.scheduler.schedule( 30 milliseconds, (1000*60*30 ) milliseconds){
self! updateUows(new Timestamp(new java.util.Date().getTime()))}

def receive = {

case updateUows(time) => {
log.info("updateuow to be sent.")
context.parent!updateUows(time)
}
}

}

完整的堆栈跟踪:
    [DEBUG] [07/26/2013 15:38:23.324] [Daemon-akka.actor.default-dispatcher-4] [EventStream(akka://Daemon)] Default Loggers started
Uncaught error from thread [Daemon-akka.actor.default-dispatcher-4] shutting down JVM since 'akka.jvm-exit-on-fatal-error' is enabled for ActorSystem[Daemon[ERROR] [07/26/2013
15:38:23.960] [Daemon-akka.actor.default-dispatcher-4] [ActorSystem(Daemon)] Uncaught error from thread [Daemon-akka.actor.default-dispatcher-4] shutting down JVM since 'akka
.jvm-exit-on-fatal-error' is enabled
java.lang.NoSuchMethodError: akka.actor.ActorSystem.dispatcher()Lscala/concurrent/ExecutionContext;
at org.exactearth.PVDaemon.Scheduler$$anonfun$receive$1.applyOrElse(Scheduler.scala:25)
at akka.actor.ActorCell.receiveMessage(ActorCell.scala:425)
at akka.actor.ActorCell.invoke(ActorCell.scala:386)
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:230)
at akka.dispatch.Mailbox.run(Mailbox.scala:212)
at akka.dispatch.ForkJoinExecutorConfigurator$MailboxExecutionTask.exec(AbstractDispatcher.scala:506)
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
]

java.lang.NoSuchMethodError: akka.actor.ActorSystem.dispatcher()Lscala/concurrent/ExecutionContext;
at org.exactearth.PVDaemon.Scheduler$$anonfun$receive$1.applyOrElse(Scheduler.scala:25)
at akka.actor.ActorCell.receiveMessage(ActorCell.scala:425)
at akka.actor.ActorCell.invoke(ActorCell.scala:386)
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:230)
at akka.dispatch.Mailbox.run(Mailbox.scala:212)
at akka.dispatch.ForkJoinExecutorConfigurator$MailboxExecutionTask.exec(AbstractDispatcher.scala:506)
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)

Shutting down Akka...
Shutting down .............(my program)

最佳答案

它应该像下面的代码一样使用ActorSystem创建Actor:

case object StartSched

class Test extends Actor with ActorLogging {
def receive = {
case StartSched =>
context.system.scheduler.schedule( 30 milliseconds, (1000*60*30) milliseconds){
self ! updateUows(new Timestamp(new java.util.Date().getTime()))
}
}
}

object Main {
def main(args: Array[String]) {
val sys = ActorSystem("Test")
sys.actorOf(Props[Test])
}
}

要在 MicroKernel 中启动它,您应该扩展 Bootable trait 和重载两种方法: startupshutdown . Docs

并在 Actor 内创建 ActorSystem 是一个非常糟糕的决定。

关于scala - Akka Scheduler 仅在 MicroKernel 中引发异常,但在 Eclipse IDE for Scala 中运行良好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17890223/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com