Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在暂时参与者失败时实现重试?_Java_Design Patterns_Concurrency_Akka - Fatal编程技术网

Java 如何在暂时参与者失败时实现重试?

Java 如何在暂时参与者失败时实现重试?,java,design-patterns,concurrency,akka,Java,Design Patterns,Concurrency,Akka,我所处的典型情况是,我有一群工人演员,他们从队列中获得工作。工人故障可以是暂时的,由环境引起,也可以是永久的,由无效作业引起 在worker actor中,我正在处理永久性故障案例,但是如何实现对暂时性案例的重试?有了监管者,我可以重新启动actor,这是尝试并重置为工作状态所需要的,但是当它失败时,我如何重试它正在处理的消息呢 谢谢 您需要实现命令模式。命令是封装要执行的操作及其参数的对象,它独立于参与者而存在。如果参与者以可重试的方式失败,主管将向参与者重新提交命令。如果参与者收到一个流并处

我所处的典型情况是,我有一群工人演员,他们从队列中获得工作。工人故障可以是暂时的,由环境引起,也可以是永久的,由无效作业引起

在worker actor中,我正在处理永久性故障案例,但是如何实现对暂时性案例的重试?有了监管者,我可以重新启动actor,这是尝试并重置为工作状态所需要的,但是当它失败时,我如何重试它正在处理的消息呢


谢谢

您需要实现命令模式。命令是封装要执行的操作及其参数的对象,它独立于参与者而存在。如果参与者以可重试的方式失败,主管将向参与者重新提交命令。如果参与者收到一个流并处理消息,那么参与者必须填充一个命令列表并记录完成情况,以便在正确的位置重新启动。如果流不可倒带,那么您必须在开始之前将所有命令排队,参与者必须记录每个命令的完成状态,以便在出现暂时故障时可以重新提交链


命令模式还可用于实现历史记录和撤消。

如果您使用的是Akka 1.2或master,则可以覆盖preRestart,以获取参与者崩溃时的当前消息

好的,我在正确的轨道上,听起来像--我已经有了一个命令对象(消息)。我想我只需要深入研究一下主管是如何更有效地工作的。我猜每个工人需要一个主管,这样他们就可以保留对正在处理的命令的引用。谢谢