[英]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.