我想知道如何有效地清理在飞行中创建的akka演员。
要提供一点背景信息:
每个事件创建的演员层次结构。
主管-
在我的应用程序中,主管参与者动态创建其他参与者(在定期事件上)。我想在该事件的处理步骤完成后清理参与者。
所以,一旦处理完成,我想杀死所有的儿童演员。
这是主管演员的代码。
class Supervisor extends Actor {
def receive={
case onEvent: OnEvent =>
//Create child actor and send message
case successfulProcessing =>
sender() ! PoisonPill
}
override val supervisorStrategy = AllForOneStrategy() {
case e: Exception =>
Stop
}
}
这是清理动态创建的参与者的正确方法吗。这种方法是否有任何缺点,或者是否有一种模式可以遵循?
我看到的模式是有一个演员管理其他演员。在本教程的以下示例中,actor1
管理actor2
,其中actor2
完成所有工作。
case class StartCounting(n: Int, actor: ActorRef)
case class CountDown(n: Int)
class CountDownActor extends Actor {
def receive = {
case StartCounting(n, actor) =>
println(n)
actor ! CountDown(n-1)
case CountDown(n) =>
if(n > 0) {
println(n)
sender ! CountDown(n-1)
} else {
context.system.shutdown()
}
}
}
object Main extends App {
val system = ActorSystem("HelloSystem")
// default Actor constructor
val actor1 = system.actorOf(Props[CountDownActor], name = "manager")
val actor2 = system.actorOf(Props[CountDownActor], name = "worker")
actor1 ! StartCounting(10, actor2)
}
你可以把它想象成递归:基本情况和归纳情况。您可以将此应用于正在管理其父级的所有兄弟角色。
我经常发现自己使用一个“主”角色,为子任务创建许多子角色。当子任务完成时,主角也应该停止自己。所以当时,我观察子角色并停止主角色context.children.is。 我经常使用这种模式,但因为我从未读过这方面的文章。我不确定,这是一个好主意还是失败的演员有问题。。。? 我已经读过Akka 2中的关机模式,但是这种方法在Java中似乎比我的解决方案更复杂? 以下是我针对具有两个子任务的主要参与者
[04/27/2014 18:09:05.518][ReadScheduler-Akka.actor.Default-Dispatcher-3][Akka://ReadScheduler/User/Collector]从参与者[Akka://ReadScheduler/User/Executor#2127791644]到参与者[Akka://ReadScheduler/User/Collector
我最近开始使用java配置方式编写spring批处理程序,并使用spring批处理和starter包。我使用了分区的步骤和任务执行器来完成我的工作,我面临的问题是,一旦作业完成,批处理过程就不会停止,它一直在我的eclipse和Linux盒子中运行。我手动找到并终止作业。你能帮个忙吗。当我在没有分区步骤的情况下以单线程的方式运行作业时,这工作很好。 我的作业配置:
问题内容: 我使用Ant通过Jenkins启动/关闭JBoss 5服务器。Ant java的spawn和fork设置为“ true”,因此命令在后台执行。 Jenkins成功启动服务器,等待两分钟(Jenkins中的“ sleep”命令),然后在睡眠后由于某种奇怪的原因关闭服务器。sleep命令是构建作业的最后一步。关闭显示: 我用谷歌搜索并尝试了建议的-Xrs命令,但没有帮助。这是怎么回事 问题
java.util.concurrent.CompletionException:Akka.Pattern.AskTimeoutException:收件人[Actor[akka:/web_server/user/MyActor#-769383443]]已终止。发送者[null]发送了类型为“com.data.model.request”的消息。 所以我重写了方法,在那里添加了一个log语句。 现在
从Android API 26开始,Android系统要求“执行一些用户可以注意到的操作”的服务将自身注册为前台服务。和“前台服务必须显示通知” 我有一个播放音频文件的服务。当播放暂停时,用户应该能够滑动通知(与Google Play音乐应用程序一样)。但是如果我调用,那么我的服务会在几分钟内被系统杀死。 暂停播放时,如何允许删除通知?