问题标签 [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.
java - Akka - 在孩子发生异常后父母如何向孩子发送消息
假设我有一个演员一次向其演员parent
发送一条消息。child
当子进程处理完当前消息后,它会通知父进程它会向子进程发送一条新消息。
为了即使孩子在某个消息上崩溃也能保持这个循环,我向父级添加了一个 SupervisorStrategy :
这个想法是,无论孩子发生什么,它都会恢复,并且父母将能够向它发送下一条消息。
但是父母如何知道错误发生的时间,以便发送下一条消息?
孩子发生了什么事,父母的触发因素是什么?
我需要覆盖类似“onChileError”的方法吗?
(将应用 Java over Scala 示例)
谢谢。
akka - Akka Kafka 流监督策略不起作用
我正在运行一个 Akka Streams Kafka 应用程序,我想在流消费者上合并监督策略,这样如果代理出现故障,并且流消费者在停止超时后死亡,主管可以重新启动消费者。
这是我的完整代码:
UserEventStream
:
StreamProcessorSupervisor
(这是班级的主管UserEventStream
班):
App
(主要应用类):
application.conf
:
运行应用程序后,我故意杀死了 Kafka 代理,然后发现 30 秒后,演员正在通过发送毒丸来停止自己。但奇怪的是,它并没有像BackoffSupervisor
策略中提到的那样重新启动。
这里可能是什么问题?
scala - 重试长寿 akka 演员的小例外
我有一个在应用程序启动时作为另一个actor的子级创建的actor,并且每天从父级接收一条消息,以执行从某个SFTP服务器获取一些文件的操作。
现在,可能有一些小的临时连接异常会导致操作失败。在这种情况下,需要重试。
但是可能会抛出异常并且在重试时不会解决(例如:找不到文件,某些配置不正确等)
因此,在这种情况下,考虑到参与者将在很长一段时间后(每天一次)接收消息,什么可能是适当的重试机制和监督策略。
在这种情况下,发送给actor的消息不是错误的输入——它只是一个触发器。例子:
如果我在父母中有这样的监督策略,它将在每个次要/主要异常上重新启动失败的孩子而不重试。
我想要的是这样的:
akka - Akka Decider 是否可以访问完整的失败场景?
阿卡新手。创建扩展的新 Scala 类SupervisorStrategy
为我提供了以下模板:
我正在寻找一种访问方式:
- 从儿童演员那里抛出的
Throwable
/Exception
ActorRef
抛出异常的子actor- 传递给子actor的消息,提示抛出异常
我认为(Decider
实际上是 a PartialFunction[Throwable,Directive]
)Throwable
只要孩子抛出异常就会通过,但我没有看到我可以从上面的列表中访问 #2 和 #3 的位置。有任何想法吗?
更新
从发布的小提琴看来,有效Decider
的是:
在上面,我看到了所有三个:
- 孩子抛出的异常
ref
引发异常的子 ( )- 最初发送给孩子的消息(导致抛出异常)
看起来没有什么需要在该类Decider
中定义。我想把逻辑拉出来,说,并找到一种方法来重构它,以便它使用 的实例,所以可能类似于:Supervisor
Decider
MyDecider.scala
Supervisor
supervisorStrategy
MyDecider
scala - 为什么我输入的演员没有被它的监护人重新启动?
我正在尝试使用 Akka 打字。我有一个模仿片状工人的假演员:
及其带有路由器的监护人:
我的路由器监听接待员事件:
但是我发现当我启动我的集群时,最终我会发现一些演员已经死亡(预期),但没有重新启动,给我留下这样的日志:
为什么不MyCluster#strategy
重新启动失败的演员?
java - Akka:DeathPactException 总是一个编程错误吗?
我偶尔在我的项目中使用 Akka.NET,所以我知道这项技术,可以用它做一些事情,但不认为自己是专家。
虽然我使用 .NET,但这个问题肯定可以由熟悉 JVM 上的 Akka 的人来回答。
最近,我DeathPactException
在查看应用程序的日志文件时遇到了一些问题。原因是一个演员(演员 A1)观看了另一个演员(A2),它自己开始了。然而,A1 并没有处理Terminated
A2 发送的消息。这是由于 A2 在执行任务后实际上停止了自己造成的。由于合理定义的主管层次结构等,系统本身工作得很好:A1 立即由其主管重新启动。
实际上是否存在一个演员会.Watch()
另一个演员然后忽略该Terminated
消息的情况?还是臭名昭著的DeathPactException
基本上总是应用程序代码中的错误,类似于NullReferenceException
/ NullPointerException
?
c# - 广播毒药时,akka.net 路由器未终止
我在尝试 akka.net 路由器时遇到问题。如果 routee 中存在使用 supervisorstrategy 处理的异常,我的循环路由器在广播 PoisonPill 消息后不会终止。如果在 routee 中没有抛出或使用 try catch 处理异常,则路由器 actor 终止就好了。我的方法有什么遗漏吗?
重现问题的示例代码:
scala - 当演员失败时,Akka 是否会自动复制变量
在Héctor Veiga Ortiz 的Akka Cookbook中,读者被告知
当一个actor抛出异常时,它会向主管发送一条消息,主管通过重新启动该actor来处理故障。它清除了actor的累积状态,并创建了一个新的actor,这意味着,它将最后分配给旧actor的状态的值恢复为preRestart值。
但是,我尝试测试以下代码,这表明作者所说的不是真的。
我得到的输出如下。
sbt:chpt2_ActorLifeCycle> runMain ActorLifeCycle preStart
中的总和是 1 preRestart 中的
总和是 2
[错误] [11/08/2018 20:06:01.423] [Supervision-akka.actor.default-dispatcher-4] [akka://Supervision /user/supervisor/LifeCycleActor] null
java.lang.ArithmeticException postRestart 中的总和
为 2 postStop 中的
总和为 6
如果作者所说的是真的,那么最终的价值应该是它的两倍。
scala - 由 BackoffSupervisor 监督的 Actor 在重启后丢失了隐藏的消息
我有一个使用隐藏的演员。有时,当它崩溃时,它会丢失所有隐藏的消息。我发现这取决于我使用的监督逻辑。
我写了一个简单的例子。
藏匿的演员:
在以下代码中,TestActor
永远不会收到 stashed TestMessage
:
但是这段代码运行良好:
我查看了来源,发现演员监督使用
了由系统调度程序逻辑支持的LocalActorRef.restart方法,但只是在旧演员终止后创建了一个新演员。有没有办法解决它?BackoffSupervisor
akka - Akka 集群启动无法注册到协调器
我正在尝试创建一个 Akka 分片集群。我想在其中一个节点上使用仅代理模式,以便将消息路由到分片区域。我收到以下警告:
**Main.java: ** 使用 application.conf 中的配置启动集群(代码稍后添加)
Test.java:分片集群的实体
MessageProducer.java(Proxy Only Mode)消息生产者每秒向 Shard 发送一条消息。
**application.conf: ** 配置文件
我做错什么了吗?有没有其他方法可以申请这种方法。我的主要目标是避免集群出现单点故障。如果任何节点发生故障,那么它不应该影响任何其他状态。谁能帮我这个?