Как определить, когда сообщение было отправлено в Акке

1

Мне интересно, есть ли возможность узнать, когда сообщение было доставлено. Так как я хочу сразу же закрыть актерскую систему. Приведенный ниже код подключается к удаленному игроку, а затем отправляет сообщение. Но в некоторых случаях локальная актерская система, похоже, закрыта слишком рано.

ActorSystem system = ActorSystem.create("Test", config.getConfig("webbackend"));
ActorSelection communicator = system.actorSelection("akka.tcp://[email protected]:2555/user/Communicator");
communicator.tell(new TimerTransmissionCmd(channel.getId()), ActorRef.noSender());
//system.shutdown();
Теги:
akka

1 ответ

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

Но я рекомендую вам настроить пруденциальный тайм-аут и после этого всегда выключать систему.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню