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

标签 java scala akka

我想知道是否有可能知道消息何时已送达。因为我想在之后立即关闭 actorsystem。下面的代码连接到远程参与者,然后发送消息。但在某些情况下,本地 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();

最佳答案

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

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;
    }
}

但我建议您配置一个谨慎的超时,然后始终关闭系统。

关于java - 如何在 Akka 中确定消息何时发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22452403/

相关文章:

Java,模块化逆

java - sbt 增量编译在 Java 11 中不起作用

java - 在 Play 中动态设置 CompletionStages 的线程池大小!与 Akka

java - Akka 2.3.6 中缺少 IOManager

java - Akka 流回调

java - 将 JComponent 相关类分组在同一个包中是否正确?

java - log4j,想在控制台中只显示调试(不是信息)并在应用程序启动时清除日志文件

java - 支柱 2 : parameters between Actions

string - 以Scala方式从同一行读取多个输入

scala - 是否需要为 Scala 2.10 上导出的宏库导出 Quasiquotes 依赖项?