问题标签 [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 投票
1 回答
1428 浏览

java - 在 AKKA 中,关闭主管是否会停止它正在监督的所有演员?

假设我有一个主管,它链接了 2 个演员。当我的应用程序关闭时,我想优雅地关闭这些演员。调用 supervisor.shutdown() 会停止所有演员还是我仍然需要手动停止演员?

格雷西亚斯

0 投票
1 回答
1538 浏览

akka - Akka supervisor 管理主管

我认为这里可能隐藏了一个使用 Akka 进行应用程序设计的更广泛的问题,但我会问如何建立一个监督树,其中“内核”或“顶级”监督员可能监督其他监督员的孩子,哪些监督员?

0 投票
1 回答
954 浏览

scala - 如何从 Akka 主管那里获取异常详细信息?

我正在测试Actor我正在处理的新消息如何处理意外消息。我想断言它GibberishException在这些情况下会抛出 a 。这是到目前为止的测试和实现:

测试:

执行:

但是,当我运行测试时,异常详细信息会到达Supervisor我建立的位置,但我不知道如何对它们做任何事情(比如记录它们或测试它们的类型)。我希望能够从主管那里获得异常详细信息,以便我可以在我的测试中重新抛出和拦截它们。在测试方法之外,如果您想在正在运行的应用程序的 UI 中报告异常的性质,我可以想象这很有用。有没有办法从Supervisor它发生的时候得到它?

0 投票
2 回答
2254 浏览

scala - Akka 中的分布式 Actor

我对 Akka 很陌生,对分布式编程也很陌生。使用 Akka 的 Mist 组件,我创建了受监督的 Actor 来异步处理 HTTP 请求。当前,所有内容都在具有本地参与者的一台物理机器上运行。我不明白的是如何构建一个具有多个盒子的真正容错系统。如 Akka 文档中所述:

此外,您(通常)需要知道一个盒子是否已关闭和/或您在另一个盒子上与之交谈的服务是否已关闭。在这里,参与者监督/链接是一个关键工具,不仅可以监控远程服务的健康状况,而且可以实际管理服务,如果参与者或节点出现故障,请对问题采取一些措施。比如在同一个节点或者另一个节点上重启actors。

我该怎么做呢?我正在寻找有关如何开始分发我的应用程序的示例或指示。我们组中的其他服务在多个 Tomcat 实例前使用 Apache 网关,因此 Tomcat 服务器宕机的事件对用户来说是透明的。我正在将我的服务部署到 Akka 微内核,并且需要在多个物理机器上实现类似级别的高可用性。

我正在使用 Akka 1.1.3。

0 投票
2 回答
5771 浏览

java - Akka:如何安排延迟间隔增加的失败重试?

让演员在失败时再次尝试某些事情的好方法是什么,但重试之间的时间间隔越来越长?假设我希望演员在 15 秒后重试,然后是 30 秒,然后每分钟重试几次。

这是我想出的:

  • 执行实际工作的actor的方法有一个可选 RetryInfo参数,如果存在,它包含我们当前的重试次数
  • 失败时,actor 将向自己发送一个新ScheduleRetryMessage的 with retryCount + 1,然后抛出一个 RuntimeException
  • 另一个演员监督工人演员,使用new OneForOneStrategy(-1, Duration.Inf()返回Resume作为其指令。演员没有状态,所以Resume应该没问题
  • 收到后ScheduleRetryMessage,演员将
    • if retryCount < MAX_RETRIES:使用 Akka 的调度程序来安排RetryMessage在所需延迟后发送
    • else: 最终放弃,发送消息给另一个actor进行错误报告

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

0 投票
0 回答
265 浏览

akka - 在 Akka 2.0 中,是否可以拥有集群主管?

我知道使用 Akka 进行适当的集群是 Akka 2.1 的重点,但是需要用现在可用的东西来构建一些东西。

我有一个多节点 Akka 设置,并希望优雅地处理远程演员死亡。但是,由于系统是对称的并且不应该有单点故障,我不确定如何正确设置主管层次结构。监督者不能与被监督的参与者在同一个 Akka 实例上,因为我需要处理整个 Akka 节点的终止,但是如果我将监督者放在一个单独的节点上,我现在冒着孤立或终止被监督的参与者的风险运行主管的节点死亡。

我真正想要的是一个集群监督者,其中任何 Akka 节点(或其中 n 个)上的参与者可以处理一组参与者的监督,以避免任何单点故障。在 Akka 2.0 中这样的事情可能吗?如果没有,获得相同效果的最佳方法是什么?

0 投票
1 回答
100 浏览

akka - Akka 2.0 中的 MaximumNumberOfRestartsWithinTimeRangeReached 等效项

在 Akka 1.3.1 中,当达到最大重启限制时,主管会收到一条MaximumNumberOfRestartsWithinTimeRangeReached消息。

Akka 2.0 中是否有等价的东西?我可以收到 Terminated 消息,但我希望能够检测到这个特定的错误情况。MaximumNumberOfRestartsWithinTimeRangeReached还给了你 lastExceptionCausingRestart,这很有用。

0 投票
1 回答
158 浏览

scala - 监督策略可以处理 ConnectException 吗?

如果由于断电导致远程参与者不可用,监督策略可以处理这种情况吗?

我已经对示例进行了编码,并且已经关闭了远程参与者系统,但监督策略似乎只考虑了远程参与者一旦到达就抛出的异常。

由于我不是 Akka 专家,我想知道这是否可以实现。

版:

我已经实现了对指示连接中发生错误的事件的订阅。我仍然需要访问发件人最初发送的消息,以免消息丢失。

0 投票
2 回答
4481 浏览

scala - Akka 2.1 异常处理 (Scala)

我有一个监督 Akka 演员,它使用路由器将消息转发给工作演员。

我有一个包装主管的类,当我在该类上调用一个方法时,它“要求”主管做某事,然后我Await.result(theFuture)用来等待结果(没有结果我无法继续)。

如果工作人员抛出异常,我想重新启动抛出异常的工作人员,并且我希望调用包装类的代码捕获异常。

我将 a 传递OneForOneStrategy给路由器构造函数,它RESTART在 a 的情况下返回Exception。在postRestartworker的方法中,我记录了重启,所以我可以验证worker是否真的被重启了。

当工作人员抛出异常时,它会重新启动,但异常会消失。这Future是询问主管的结果,包含一个异常,但它是 a akka.pattern.AskTimeoutException,仅在 5 秒而不是 20 秒后抛出,这是我一直徘徊的隐式超时。异常实际上在工作程序启动后不到一秒发生。

问题 1:如何从调用我的包装类的代码中的工作人员那里获取异常?

另外,worker的receive方法是这样的:

有些东西正在将异常记录到控制台,但这不是我的代码。堆栈跟踪是:

第 169行是上面方法列表中显示Source.scala的行。val response = ???receive

问题 2:谁将该异常记录到控制台,我该如何阻止它?

0 投票
1 回答
1506 浏览

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

我在我的项目中使用 Akka (Java) 来提供重试方案。所以我有一个主管演员,它在收到消息时将其委托给受监督的演员。我对主管有一个一对一的策略来重启(无条件地)。

受监督的 Actor 有一个 preRestart 钩子,它将消息发送给自己。

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

问题:

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

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