在Akka中向BroadcastGroup添加新地址

时间:2017-05-10 13:06:11

标签: java akka actor

在我的一位演员中,我创建了一个像这样的路由器演员:

import java.util.LinkedHashSet;
import java.util.Set;

public class CommonCharacters {
 public static void main(String[] args) {
    Pair<String, String> p = getDuplicates("abdxzewxk", "axzmnx");
    System.out.println("Unique:" + p.value1 + "  Common:" + p.value2);
}

public static Pair<String, String> getDuplicates(String s1, String s2) 
{
    Set<Character> xters1 = new LinkedHashSet<Character>();
    Set<Character> xters2 = new LinkedHashSet<Character>();

    for (char c : s1.toCharArray()) {
        xters1.add(c);
    }

    for (char c : s2.toCharArray()) {
        xters2.add(c);
    }

    Set<Character> unique = new LinkedHashSet<>();
    Set<Character> common = new LinkedHashSet<>();

    for (char c : xters1) {
        if (xters2.contains(c))
            common.add(c);
        else
            unique.add(c);
    }

    for (char c : xters2) {
        if (xters1.contains(c))
            common.add(c);
        else
            unique.add(c);
    }

    return new Pair(stringfry(common), stringfry(unique));
}

public static String stringfry(Set<Character> chrs) {
    StringBuilder sb = new StringBuilder();
    chrs.forEach(s -> {
        sb.append(s);
    });
    return sb.toString();
}


static class Pair<E, U> {
    private E value1;
    private U value2;

    public Pair(E value1, U value2) {
        this.value1 = value1;
        this.value2 = value2;
    }
}

其中this.actorRouter = getContext().actorOf(Props.empty().withRouter(new BroadcastGroup(neighbours)), "router"); 是字符串列表(地址)。现在我希望能够更改该列表。例如,当一个新消息从一个未知的actor到达时,我想将他的地址添加到我的路由器。我尝试用新列表执行上面的行,但是会导致错误:

  

已采取演员姓名

创建一个BroadcastGroup后是否可以操作它?

1 个答案:

答案 0 :(得分:1)

来自the doc

管理消息

  • 将akka.routing.GetRoutees发送给路由器actor将使其发送 在akka.routing.Routees消息中回复其当前使用的路由。
  • 将akka.routing.AddRoutee发送给路由器actor会将该routee添加到其路由集合中。
  • 将akka.routing.RemoveRoutee发送给路由器actor会将该路由器移除到其路由集合。
  • 将akka.routing.AdjustPoolSize发送到池路由器actor将添加或删除该路由器的路由数量。