问题标签 [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.
actor - Akka.net - additional error handling by coordinator
Given an Akka.net-based actor system with some basic structure like:
Coordinator actor defines supervision strategy with Directive.Restart
used.
Child actors could fail for several reasons (for example, with ArithmeticException
, InvalidOperationException
and MyCustomException
).
But when a child fails with MyCustomException
, I'd like to have an ability to somehow additionally handle it without changing the default supervision mechanism (restart approach should still work here).
For example, to add Console.Writeline
with exception details.
How do I implement it?
scala - 如何在akka中进行监督
我有两个演员,一个是父母,一个是孩子,孩子演员负责根据给定的ID从MongoDB中获取数据并将数据回复给调用演员,在我的情况下是父母,现在我想在我的孩子演员我知道如何执行监督策略,但是如何在我的代码中做到这一点让我感到困惑应用程序,y 监督,因为我不知道我的代码将来会抛出什么异常这是我的代码,请帮助我 ReadOnlyAdminQueryActor.scala(Patent Actor)
ReadOnlyAdminReadMongoActor.scala(儿童演员)
我如何以正确的方式执行监督,以及如何知道在我的子actor中会抛出哪个异常 幸运的是,Java 库明确说明它们将要抛出什么,而 Scala 库几乎总是抛出很少或不抛出即使在 IDE 中,当我们将鼠标悬停在代码上时也不会显示任何信息,请帮助我提前感谢
akka - Akka 监督策略和终止
我是 Akka 的新手,正在努力解决SupervisorStrategies
和终止儿童演员的问题。我有几个非常相似的担忧。
首先,我的理解是,如果一个演员创建另一个演员(通过context.actorOf(...)
),那么它自动成为创建的演员的父母/主管。这是一个演员可以成为另一个演员的父母/主管的唯一方式。
如果我上面说的有什么不正确的地方,请先纠正我!但是,假设我或多或少走上了正轨,那么当多个父演员创建同一个子演员的实例时会发生什么:
在上面的例子中,Fizz
和Foo
父母是同一个Buzz
actor实例,还是两个实例Buzz
?如果是多个实例,我可以假设终止一个实例只会终止该实例吗?或者,如果Foo
终止/停止其Buzz
实例,那是否也会终止/停止Fizz
的实例?
exception - 顶级 Akka actor 升级和关闭挂钩
在我的 Akka 系统中,有一个顶级(“根”)actor ,Initializer
所有其他actor 都来自该actor。还有一个actor,Destroyer
负责在收到Destroy
消息时优雅地关闭系统。有几种情况,演员会发送 aDestroy
到Destroyer
,但这些在这里并不重要。
我现在想在Initializer
'sSupervisorStrategy
中实现功能,如果它无法处理其中一个孩子抛出的失败/异常,它将解释为“停止世界”类型的事件,并优雅地关闭系统.
我的下意识反应是Initializer
升级失败,但我不确定当顶级演员升级时会发生什么。如果有一种方法可以让升级以某种方式调用Desroyer
,但不知道如何将其全部连接起来,那就太好了。有任何想法吗?
akka - Akka System Guardian 的自定义 SupervisorStrategy
根据System Guardian 上的 Akka 文档,如果顶级参与者抛出一个Exception
,它将无限期地重新启动(有 2 个例外 - 没有双关语)。
我的演员系统有 1 个且只有 1 个顶级演员:Initializer
. 如果Initializer
抛出异常,我希望SuervisorStrategy
对它应用不同的方法,如果可能的话:
- 最多重启
Initializer
3 次 - 如果这不起作用,则停止/终止它
我如何为 System Guardian 实施这种自定义策略?
java - Akka Futures 和 Supervisor Strategies 如何处理失败
Akka Java在这里。我刚刚阅读了有关使用 futures 的“询问”模式的 Akka 文档,并且不了解一些事情是如何工作的,关于主管策略(决策者)和失败回调都是图片的一部分的场景。
家长问孩子
假设我有两个演员,Fizz
并且的父/创建者Buzz
在哪里。因为is的父级,它有一个for来处理它的失败:Fizz
Buzz
Fizz
Buzz
SupervisorStrategy
Buzz
有时,Fizz
需要询问Buzz
一些数据。发生这种情况时,可能会出现以下三种结果之一:
Buzz
成功返回并提供GetBuzzDataCallback
withbData
;或者Buzz
抛出一个BuzzIsAngryException
;或者Buzz
引发其他类型的异常/错误
我想知道后两种情况会发生什么:
- 谁会收到异常通知,以什么顺序以及如何通知?换句话说,
GetBuzzDataCallback
发送的异常是否作为其Throwable failure
参数?或者,被FizzFailureDecider
调用?或者两者都有(如果回调和决策者/主管策略都通过了错误,这似乎有点多余和复杂)?
父母询问非儿童
与上面相同的场景,除了nowFizz
不是. 在这种情况下,我可以假设发送异常(作为它的参数)吗?Buzz
GetBuzzDataCallback
Throwable failure
我想我的问题的根源是:当涉及主管策略和未来回调时,当抛出子异常时谁会收到通知,以及以什么顺序?正如我上面提到的,对我来说,如果两者都收到失败/异常,那将更加令人困惑,因为那时您可能有一个主管策略试图重新启动,Buzz
而回调正试图对异常执行其他操作(可能是冲突的)。
请注意:虽然肯定不是必需的,但如果提供的任何代码片段是 Java 而不是Scala(Scala 对我来说就像象形文字),我将不胜感激!
java - Akka 和备份/后备演员
我在Hystrix-land度过了相当长的一段时间后来到 Akka,在那里,和 Akka 一样,失败是一等公民。
在 Hystrix 中,我可能有一个SaveFizzToDbCmd
尝试将Fizz
实例保存到 RDB(MySQL 等),以及一个备份/“<em>fallback”SaveFizzToMemoryCmd
将其保存Fizz
到内存缓存中,以防主(DB)命令执行关闭/开始失败:
在 Hystrix 中,如果run()
抛出异常(比如 a SqlException
),getFallback()
就会调用它的方法。如果在一定时间内抛出足够多的异常,HystrixCommands
“断路器”就会“跳闸”,只有getFallback()
方法会被调用。
我有兴趣在 Akka 中完成相同的任务,但要使用演员。使用 Akka,我们可能有一个JdbcPersistor
Actor 和一个InMemoryPersistor
备份/备用 Actor,如下所示:
我正在努力解决的问题是:
- 如何
InMemoryPeristor
正确配置/接线作为JdbcPersistor
失败时的备份;和 - 故障回到
JdbcPersistor
如果/何时“治愈”(尽管它可能永远不会)
我想这是属于 inside 的逻辑JdbcPersistors
SupervisorStrategy
,但我在 Akka 文档中找不到任何东西,也找不到任何实现这种行为的代码片段。这告诉我“<em>嘿,也许这不是 Akka 的工作方式,也许在 Akka 领域有一种不同的方式来执行这种断路器/故障转移/故障回复。” 想法?
请注意:Java 示例非常受欢迎,因为 Scala 在我看来就像象形文字!
java - 在 Akka 中使用重新启动的 Actor 进行消息持久性和回放
Akka Java在这里。我有两个演员,Parent
和Child
,其中前者是后者的父母。如果Child
引发特定异常(例如 an UnrulyTeenagerExcepton
),那么我正在寻找的行为如下:
- 保存对抛出异常时
Parent
正在处理的消息的引用;Child
然后 Child
重新启动,并将持久化的消息“回放”到Child
; 但- 如果这个保存 -> 重启 -> 重播循环发生了 3 次,并且
Child
抛出了UnrulyTeenagerException
3 次,那么我们SupervisorStrategy.escalate()
迄今为止我最好的尝试:
但正如您所看到的,我正在努力解决消息持久性和回放问题。有任何想法吗?非常感谢 Java 代码示例,Akka 足够强悍,无需学习 Scala 象形文字!
scala - 主管策略RESTART,实际上并没有重新启动我的子actors吗?
我有以下策略:
根据我的阅读(我认为我误解了),每当子演员抛出未捕获的异常时,它就会升级到父演员。根据我上面的规则,如果我的子演员总是在接收时抛出异常,不应该重新启动 10 次吗?
出于某种原因,从我的日志来看,它看起来只是重新启动一次,仅此而已。我将日志放在启动前和启动后。
编辑:
我意识到自己犯了一个错误:
我使用的是“context.system.actorof()”,这就是为什么没有一个儿童演员对这个策略做出反应。现在我正在使用“context.actorof()”,我确实看到异常被策略“捕获”了。
对于我的孩子演员,它需要与 redis 交谈以获取信息,我故意关闭我的 redis,所以孩子演员会失败,现在如果我将我的主管层设置为最多重启 10 次,我应该看到相同的堆栈跟踪 10 次吗?
我是否正确假设当一个子actor重新启动时,发送的相同消息会再次发送给它?
akka - Akka - 当父演员重新启动时,子演员重新启动
我有一个单身演员的层次结构。家长监督和协调孩子。当协调器重新启动时,我需要让子演员继续运行。有没有办法防止子演员在他们的父母重新启动时重新启动,或者我应该重新考虑我的演员层次结构?我一直在研究 akka 监督策略,但找不到明确的答案。