这个要求可能听起来很奇怪,或者可能是我不知道如何解决这个问题,我在这里给出了最好的解释,用下面的图解释
Legacy Application
),它作为单个进程运行。 Legacy Application
对java版本,slf4j,spring等具有非常旧的依赖性。Akka Actor
内并在不同的JVM和Actor系统中远程启动。 processor = context.actorOf(Props [Processor],“processor”)
我的配置看起来像
deployment {
/newApplication/processor/ {
remote = "akka.tcp://ProcessingSystem@127.0.0.1:2552"
}
但是由于Processor
具有所有旧的依赖关系,我也将它们放入我的新系统中:(
我在寻找什么?
- 有没有办法可以在ActorSystem(和JVM)中启动遗留应用程序,在那里它可以封装,但在新的应用程序中有主管?
底线:我希望旧的依赖项不会泄漏,但由于其他JVM可以抛出OOM
,我想从外部监督(新的ActorSystem)
答案 0 :(得分:0)
关于依赖关系,只需使用Group Router,它通过ActorSelection发送消息,并且不需要在发送方存在目标类。但是此路径上的Actors的存在不是由Group Router管理的。更多详情请见:http://doc.akka.io/docs/akka/2.4-M2/scala/remoting.html
} else if ("com.google.guava".equals(dependency.getGroupId()) &&
"guava".equals(dependency.getArtifactId())) {
version = getNewerRevision(dependency, new PreciseRevision(18, 0));
关于监督:只需从路径(在组路由器中使用)解析ActorSelection(akka.actor.deployment {
/parent/remoteGroup {
router = round-robin-group
routees.paths = [
"akka.tcp://app@10.0.0.1:2552/user/workers/w1",
"akka.tcp://app@10.0.0.2:2552/user/workers/w1",
"akka.tcp://app@10.0.0.3:2552/user/workers/w1"]
}
}
方法调用),并在新应用程序中将resolveOne
个对象添加到actor的ActorRef
,然后处理context.watch
条消息。