问题标签 [akka-supervision]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
89 浏览

akka - Akka:获取有关当前参与者层次结构的信息

出于调试目的,我希望有一种编程方式来获取系统中当前存在的未终止角色树。

任何可以提供\可以转换为参与者层次结构当前状态的文本表示也足够了。

我该如何实施?

0 投票
2 回答
187 浏览

akka - Akka Actor 中的故意阻塞

我知道 Akka 演员不应该为了保持对消息的反应而阻塞,但是我如何构建我的服务来监控一个无限期运行的进程?

例如,我们正在使用 Amazon Kinesis 连接器库。您创建一个具有给定配置的连接器,该配置继承自 Runnable,然后调用 Run() 方法。连接器只是无限期地运行,从 Kinesis 中提取数据,并将其写入 Amazon S3。事实上,如果runnable返回,那就是一个错误,需要重新启动。

方法 (1) 将简单地为每个运行的 Kinesis 连接器创建一个子 Actor,如果 Run() 方法返回,则抛出异常,监督 Actor 会注意到异常并重新启动子 Actor。每个线程每个子actor一个连接器。

方法 (2) 是让子 Actor 将 Kinesis 连接器包装在 Future 中,如果未来返回,则 Actor 将在另一个 Future 中重新启动连接器。可以想象一个参与者可以管理多个连接器,但这是否意味着每个 Future 都在单独的线程中执行?

哪种方法最符合 Akka 的哲学,或者还有其他人推荐的方法吗?一般来说,我想发现任何连接器的任何问题,然后重新启动它。总共不会有超过六个连接器并行运行。

0 投票
1 回答
660 浏览

java - Akka - 如何重新启动路由器产生的孩子?

我有一个Actor使用Router. 当其中一个孩子失败时。我在 startegy 中收到有关失败的通知。但是,Actor它不会自行重新启动。

我还从这篇SO 帖子中发现,如果 a 的孩子Router终止,Router则不会自动产生新的孩子。而且,当路由器的所有子节点都终止时,Router它自己也会终止。

现在是百万美元的问题 - 重新启动由 a 产生的孩子的正确方法是Router什么?

0 投票
1 回答
1665 浏览

scala - 当子actor在未来的onFailure中抛出异常时,Akka主管actor不处理异常

我遇到了一个 Akka 主管演员的问题。当子角色在未来结果的 onFailure 方法中抛出异常时,主管不会处理该错误(我想在发生 ConnectException 的情况下重新启动子角色)。

我正在使用 Akka 2.3.7。

这是主管演员:

这是儿童演员:

我尝试按照此处的建议使用 akka.actor.Status.Failure(e) 通知发件人,但没有奏效,主管未处理异常。

作为一种解决方法,我找到了这种方法来让它工作:

这是 Akka 错误还是我做错了什么?

谢谢!

0 投票
1 回答
968 浏览

scala - 安排 Akka 演员的重启

有没有人知道创建一个在延迟后执行 Actor 重启的 SupervisorStrategy 的方法?为了提供一些上下文,我有一个在启动时查询数据库的演员。如果 DB 连接断开,Actor 将旋转直到达到最大重试次数。延迟重启会很好。

蛮力但不可接受的解决方案是执行以下操作:

但是,这对我来说似乎站不住脚,因为我想避免任何阻塞代码。

这难道不是一个应该得到演员支持的概念吗?是否应该将延迟或重试移至 Actor 实现本身?这似乎与“让它崩溃”的想法背道而驰。

0 投票
2 回答
907 浏览

scala - Akka 主管抓住未来的失败

我正在尝试使用 Futures 和 Akka 主管开发应用程序,但是当 A 未来向参与者返回失败时,其主管没有收到异常。

这是我的代码。

1) 监督演员

监制演员

我究竟做错了什么?

非常感谢大家!

0 投票
1 回答
442 浏览

scala - 死信箱可以在akka中重复使用吗?

我制作了以下代码:

这段代码的目的,是为了证明,当 Luke 重启时,他的死信箱可以接收消息,当 Luke 再次上线时,他可以接收到他不在时发送给他的消息。

输出似乎还可以。这在某种程度上是一个证明:

但是,我不确定这是否总是正确的。我在akka文档中找不到它,所以我的推理可以吗?死信箱可以在akka中重复使用吗(演员重启后)?

顺便提一句。我该如何处理context.stop(self)维德的卢克supervisorStrategy

0 投票
0 回答
206 浏览

scala - 如何访问 akka.routing.Router?

我正在使用application.conf中的路由器配置创建路由器。

在某种情况下,我需要手动删除路由并将路由添加到我的路由器。我在 akka-scala 文档(链接)中看到,使用removeRouteeandRoutee我们将能够实现它。

但由于我使用配置创建路由器,我可以使用以下代码选择路由器。

在未来 onComplete Success 调用它返回akka.routing.RoutedActorRef。如何访问创建的akka.routing.Router?或者无论如何我可以将它转换为路由器对象?

非常感谢您提前。

0 投票
1 回答
385 浏览

scala - 在多次重试后告诉发件人演员失败的最佳方法是什么

我有将文件上传到 Dropbox 的父级 -> 子级角色关系。该关系由主管参与者和上传参与者组成。主管角色为上传角色定义主管策略。因此,如果上传到 Dropbox 失败,只要达到最大重试次数,就应该重新启动 actor。在我的应用程序中,我对上传的状态感兴趣。所以我使用询问模式来接收成功或失败的未来。您可以在下面找到我的演员的当前实现。

我现在的问题是:有没有更好的解决方案来告诉我的应用程序上传actor在指定次数或重试后失败。尤其是为演员存储发送者的地图,感觉有点别扭。

0 投票
1 回答
534 浏览

akka - Akka Remoting 接触点节点需要运行吗?

我是 akka 和 akka 远程处理和 akka 集群的新手。我已经使用以下配置构建了一个系统

应用程序.conf

worker.conf

不明白的是,akka 系统将在我的本地启动,并使用种子节点来形成集群。这是否意味着种子节点应该已经在运行。这意味着该进程是否应该已经在这些 ip:port 上启动?

原因是:如果没有这个过程已经在运行,我会得到关联失败,因为它是封闭的。

*******UPADTE *****

上述问题是因为使用浮动 ips。我的节点在 Openstack Vm 上运行,它们确实有一个静态 IP。使用静态 IP 解决了问题。

另一个有趣的发现。当节点启动时,remote.netty.tcp 中的主机名应该是机器 inet,正如 Ryan 提到的,其中一个种子节点需要启动集群才能启动,因此让本地机器成为种子节点会更好。如果您有分布式种子节点,则更喜欢使用 localhost inet IP 而不是 127.0.0.1。