如何确定何时在Akka中发送消息

时间:2014-03-17 10:51:12

标签: java scala akka

我想知道是否有可能知道邮件何时发送。因为我想在之后关闭actor系统。下面的代码连接到远程actor,然后发送消息。但在某些情况下,当地的演员系统似乎太早关闭了。

ActorSystem system = ActorSystem.create("Test", config.getConfig("webbackend"));
ActorSelection communicator = system.actorSelection("akka.tcp://Midas@127.0.0.1:2555/user/Communicator");
communicator.tell(new TimerTransmissionCmd(channel.getId()), ActorRef.noSender());
//system.shutdown();

1 个答案:

答案 0 :(得分:0)

尝试在发送消息后添加此代码:

Boolean wasProcessed = (Integer)Await.result(Patterns.ask(communicator, new ResultClass(), 5000), 
            Duration.create(5000, TimeUnit.MILLISECONDS));

if(wasProcessed){
    actorSystem.shutdown();
}

您还必须在Actor类中添加它:

private boolean wasProcessed = false;

@Override
public void onReceive(Object messageReceived) throws Exception {
    if (messageReceived instanceof ResultClass) {
        this.workerActor1.tell(wasProcessed, getSender());
    } else {
        //Put your process code here
        wasProcessed = true;
    }
}

但我建议您配置一个审慎超时,之后总是关闭系统。