微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – Akka:如何在延迟时间间隔延长的情况下安排重试失败?

一个演员再次尝试失败的好方法是什么,但重试之间的时间间隔越来越长?假设我希望演员在15秒后再次30秒钟再次尝试一次,那么每一分钟都会有限次.

这是我想出的:

>执行实际工作的actor的方法是可选的
RetryInfo参数,如果存在,则包含的号码
我们目前正在重试
>失败时,actor将向retryCount 1发送一个新的ScheduleRetryMessage,然后抛出一个RuntimeException
>另一个演员监督工作者演员,使用新的OneForOnestrategy(-1,Duration.Inf())返回Resume作为其指令,actor没有状态,所以Resume应该OK
>在接收到ScheduleRetryMessage时,演员将会

>如果retryCount< MAX_RETRIES:使用Akka的调度程序安排在所需延迟后发送RetryMessage
>其他:最后放弃,发送消息给另一个演员错误报告

这是一个很好的解决方案还是有更好的方法

解决方法

你可以有一个主管启动工人演员.文档中的提示是为工作人员声明一个大小为1的路由器.主管将跟踪重试次数,然后根据需要安排发送给工作人员的消息.

即使您将创建另一层演员,这对我来说似乎更清晰,因为您将监督功能从工作人员中排除.理想情况下,您可以让这位1名主管对n名工作人员,但我认为您必须使用生命周期监控来从儿童演员获得失败.在这种情况下,您只需保留[ActorRef,Int]的地图即可跟踪所有受监管人员的重试次数.监督政策将恢复,但是如果您达到最大的重试次数,您可以向有罪的ActorRef发送毒药.

原文地址:https://www.jb51.cc/java/124903.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐