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

标签 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的关系。我如何将路由与消息实例关联起来?

最佳答案

你不HAVE TO (请参阅发送方法注释)从提供的列表中选择目标路由。你可以有这样的东西:

Routee democratRoutee = new ActorRefRoutee(democratActorRef);
Routee republicanRoutee = new ActorRefRoutee(republicanActorRef);

@Override
public Routee select(Object message, IndexedSeq<Routee> routees) {
  switch ((Message) msg) {
    case DemocratVote: return new NoRoutee();
    case DemocratCountResult:
      democratRoutee;
    case RepublicanVote: return new NoRoutee();
    case RepublicanCountResult:
      return republicanRoutee;      
    default:
      throw new IllegalArgumentException("Unknown message: " + msg);
  }
}

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

关于java - 如何使用 Akka 2.3.11 在 Java 中创建自定义路由器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31878832/

相关文章:

akka - 如何使用 SubFlows 对已排序流的项目进行分组?

java - 为什么我在增强 ebean scala 实体时收到 java.lang.VerifyError

scala - 与Frege一起运行的Akka比Scala竞争对手慢

java - 如何消除由 sleep 线程引起的 tomcat 内存泄漏日志条目

Java:没有默认构造函数的类的newInstance

java - 嵌套哈希表?

java - 如何通过移位将 float 存储在字节数组中

java - hashmap 中的 bucket 到底是什么?

scala - 如何使用 spray-json 库将 toJson 应用于案例类的实例

scala - akka 调度器的延迟如何?