监督任何非儿童演员?

时间:2015-07-26 03:48:30

标签: java scala akka typesafe typesafe-stack

这个要求可能听起来很奇怪,或者可能是我不知道如何解决这个问题,我在这里给出了最好的解释,用下面的图解释

enter image description here

  • 我有一个现有的应用程序(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)

1 个答案:

答案 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条消息。