Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
阿克卡;Java-遇到死信_Java_Akka - Fatal编程技术网

阿克卡;Java-遇到死信

阿克卡;Java-遇到死信,java,akka,Java,Akka,我试图创建一个Akka演员系统,每个演员可以创建几个新的儿童演员。 例如:Actor A读取一个200K行的输入文件,其中每行的将把该文本行分配给Actor B。Actor B将根据某些业务逻辑创建Actor C,依此类推 当分派演员B时,我面临一个不一致的行为,在某个点上,我得到以下错误: Message[java.lang.String]没有发送者到参与者[akka://My-Akka/user/$a/$b#304462457]未交付。[1] 遇到死信。可以关闭此日志记录 读取(并分派100

我试图创建一个Akka演员系统,每个演员可以创建几个新的儿童演员。 例如:Actor A读取一个200K行的输入文件,其中每行的将把该文本行分配给Actor B。Actor B将根据某些业务逻辑创建Actor C,依此类推

当分派演员B时,我面临一个不一致的行为,在某个点上,我得到以下错误:

Message[java.lang.String]没有发送者到参与者[akka://My-Akka/user/$a/$b#304462457]未交付。[1] 遇到死信。可以关闭此日志记录

读取(并分派100行或1000行)后,可能会出现错误。每次跑步都不一样

这些程序从一些主类开始:

ActorSystem system = ActorSystem.create("My-Akka");
ActorRef actorA= system.actorOf(Props.create(ActorA.class));    
actorA.tell("some text", ActorRef.noSender());
在Actor A中,我正在创建一个路由器:

    Router router;
{
    List<Routee> routees = new ArrayList<Routee>();
    for (int i = 0; i < 5; i++) {
        ActorRef r = getContext().actorOf(Props.create(ActorB.class));
        getContext().watch(r);
        routees.add(new ActorRefRoutee(r));
    }
    router = new Router(new RoundRobinRoutingLogic(), routees);
}
和Actor B的createReceive函数:

    @Override
public Receive createReceive() {
    return receiveBuilder()
            .match(String.class, message -> {
                        ....
                        String line;
                        while ((line = br.readLine()) != null) {
                            router.route(line, getSender());
                        }
                    }
                }

            })
            .match(Terminated.class, message -> {
                router = router.removeRoutee(message.actor());
                ActorRef r = getContext().actorOf(Props.create(ActorB.class));
                getContext().watch(r);
                router = router.addRoutee(new ActorRefRoutee(r));
            })
            .build();
}
    @Override
public Receive createReceive() {
    return receiveBuilder()
            .match(String.class, s -> {
                System.out.println("got message " + s);
            })
            .matchAny(o -> logger.info("received unknown message"))
            .build();
}
我想我错过了一些东西。为什么每次参与者A都能在到达死信之前向参与者B发送不同数量的消息。 是因为主程序在所有演员都开始工作之前就终止了吗?如果是这样,需要改变什么


谢谢

问题似乎是由于在Junit contex中运行程序在特定时间关闭了系统并杀死了参与者

一旦我以常规模式运行程序,问题就消失了