如何使用Akka 2.3.11在Java中创建自定义路由器?

时间:2015-08-07 13:22:27

标签: java akka

我是akka的新手,有点卡住了。任何帮助非常感谢。

在akka 2.1.4文档http://doc.akka.io/docs/akka/2.1.4/java/routing.html中,提供了示例自定义路由器代码,其中自定义路由逻辑将按照实例路由消息。

return new CustomRoute() {
    @Override
    public Iterable<Destination> destinationsFor(ActorRef sender, Object msg) {
      switch ((Message) msg) {
      case DemocratVote:
      case DemocratCountResult:
        return Arrays.asList(
          new Destination[] { new Destination(sender, democratActor) });
      case RepublicanVote:
      case RepublicanCountResult:
        return Arrays.asList(
          new Destination[] { new Destination(sender, republicanActor) });
      default:
        throw new IllegalArgumentException("Unknown message: " + msg);
      }
    }
};

我正在尝试使用akka 2.3.11路由器API的http://doc.akka.io/docs/akka/2.3.11/java/routing.html来实现类似的逻辑,但无法理解下面的代码段。

@Override
public Routee select(Object message, IndexedSeq<Routee> routees) {
    List<Routee> targets = new ArrayList<Routee>();
    for (int i = 0; i < nbrCopies; i++) {
      targets.add(roundRobin.select(message, routees));
    }
    return new SeveralRoutees(targets);
}

无法获得routee和actor的关系。我如何将routee与消息实例相关联?

1 个答案:

答案 0 :(得分:1)

您没有HAVE TO(请参阅发送方法说明)从提供的列表中选择目标路由器。你可以这样:

 void Start () {

    InvokeRepeating ("spawn", delay, clone_delay);

}

void spawn () {
    Instantiate (cube, new Vector3 (Random.Range (6, -6), 10, 0), Quaternion.identity);

}

//注意:我不知道Java中NoRoutee实例getter的确切语法,因此它可能会有所不同。