gpt4 book ai didi

java - 在 Actor 重新启动之前处理残留消息

转载 作者:太空宇宙 更新时间:2023-11-04 12:55:08 25 4
gpt4 key购买 nike

我有一个 UntypedActorPinnedDispatcher 一起运行,启动时,它会尝试执行一个且只有一个繁重的任务T

为了使 Actor 的响应速度更快,任务 T 被分成许多连续的子任务 T1 ... Tn,每个子任务处理程序都会向 self() 发送一条新消息以继续下一个子任务:

@Override
public void onReceive(Object message) throws Exception {
try {
MethodUtils.invokeMethod(this, "handleMessage", message);
} catch (NoSuchMethodException nsme) {
unhandled(message);
}
}

@SuppressWarnings("unused")
public void handleMessage(T1 message) {
doTask1();
getSelf().tell(new T2(), getSelf());
}

@SuppressWarnings("unused")
public void handleMessage(T2 message) {
doTask2();
getSelf().tell(new T3(), getSelf());
}

问题是,如果 Actor 因收到其他 Actor 的消息而崩溃,则重新启动后很可能会在邮箱中保留一些残留消息(例如 T3)。

有没有办法让这种actor在重启后处于干净的初始状态?

最佳答案

使用getContext().become(),我们可以构建一个状态机。当参与者处于初始状态时,它只期望开始处理一种消息(在本例中为T1)。在收到此消息之前,请忽略任何其他消息。

关于java - 在 Actor 重新启动之前处理残留消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35473035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com