gpt4 book ai didi

java - Akka - 受监督 Actor 的重启

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

我在我的项目中使用 Akka (Java) 来提供重试方案。所以我有一个主管 Actor ,它在收到消息后将其委托(delegate)给受监督的 Actor 。我对主管有一个一对一的策略来重启(无条件)。

受监督的 Actor 有一个 preRestart 钩子(Hook),它将消息发送给自身。

@Override
public void preRestart(Throwable reason, Option<Object> message){
//send it to the supervisor so that it can be enqueued once again to retry
if(reason.getCause() instanceof SQLException){
log.error("Not retrying since there seems to be a problem with the SQL itself!");
super.preRestart(reason, message);

}
else{
log.warn(""+state+" Trying to redo a processing: "+((RecordData)message.get()).getRecord());

getSelf().tell(message.get(), getSender());
super.preRestart(reason, message);
}
}

现在我也想保留失败 Actor 的内部状态!我知道只有当我的策略是“恢复”时才会保留状态,但在这种情况下,不会调用 onRestart Hook 并且消息将会丢失。

问题:

1.实现此目的的唯一方法是设置消息本身的状态并重新启动吗?

2.如果状态保持顺序,那么我需要提供“有序”邮箱实现(基于出队)。这样的理解正确吗?

最佳答案

我怀疑您是否可以向处于 preRestart 阶段的 Actor 发送消息。

您的策略应该是在崩溃/重新启动时重置参与者。如果你想保留内部状态,你必须将它传递到其他地方(其他参与者、数据库),以便在新参与者启动时再次询问它。

为什么不在主管中实现更多逻辑?

如果我知道您到底使用的是哪个版本的 Akka,我会在这里发布一些示例代码。

关于java - Akka - 受监督 Actor 的重启,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15548976/

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