繁体   English   中英

Akka-受监督演员的重新启动

[英]Akka - restart of supervised actors

我在我的项目中使用Akka(Java)提供重试方案。 因此,我有一个主管演员,该主管在收到消息后会将其委托给受监督的演员。 我对主管有一个一对一的策略来重新启动(无条件)。

受监管的actor具有preRestart挂钩,该挂钩将消息发送给self。

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

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

题:

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

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

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

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

为什么不真正在主管中实施更多逻辑呢?

如果我确切知道您使用的是哪个版本的Akka,我将在此处发布一些示例代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM