问题标签 [akka-actor]

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 回答
145 浏览

akka - Akka 监督策略和终止

我是 Akka 的新手,正在努力解决SupervisorStrategies和终止儿童演员的问题。我有几个非常相似的担忧。

首先,我的理解是,如果一个演员创建另一个演员(通过context.actorOf(...)),那么它自动成为创建的演员的父母/主管。这是一个演员可以成为另一个演员的父母/主管的唯一方式。

如果我上面说的有什么不正确的地方,请先纠正我!但是,假设我或多或少走上了正轨,那么当多个父演员创建同一个子演员的实例时会发生什么:

在上面的例子中,FizzFoo父母是同一个Buzzactor实例,还是两个实例Buzz?如果是多个实例,我可以假设终止一个实例只会终止该实例吗?或者,如果Foo终止/停止其Buzz实例,那是否也会终止/停止Fizz的实例?

0 投票
1 回答
1808 浏览

akka - Akka System Guardian 的自定义 SupervisorStrategy

根据System Guardian 上的 Akka 文档,如果顶级参与者抛出一个Exception,它将无限期地重新启动(有 2 个例外 - 没有双关语)。

我的演员系统有 1 个且只有 1 个顶级演员:Initializer. 如果Initializer抛出异常,我希望SuervisorStrategy对它应用不同的方法,如果可能的话:

  • 最多重启Initializer3 次
  • 如果这不起作用,停止/终止它

我如何为 System Guardian 实施这种自定义策略?

0 投票
1 回答
641 浏览

akka - Akka Actor 自定义主管

Akka 文档说要配置

akka.actor.guardian-supervisor-strategy,它采用完全限定的类名SupervisorStrategyConfigurator

SupervisorStrategyConfigurator 是一个特征。我是否需要使用我的子类特征扩展任何类?还是我只是定义特征并在配置中指定它,导致 Akka 生成具有该特征的监护人角色?

0 投票
1 回答
1757 浏览

scala - 当主管重新启动关联的 Actor 时,ActorRef 是否更新?

如果我像这样创建一个日志演员

并且记录器由于异常重新启动,我的记录器停止写入磁盘。

我一直在发消息logger ! msg

我是否正确假设当主管重新启动我的日志演员时 ActorRef 没有更新?

0 投票
1 回答
585 浏览

scala - Akka 自定义主管未生效

在 src/main/resources/application.conf

这是指以下内容:

我的演员是这样实例化的

但是,当miner遇到异常时,它仍然会重新启动(它仍然使用默认的主管策略)


作为旁注,我的演员有非常简单的内部状态。所有失败都是由于外部资源造成的(即,由于服务器发送了错误的响应,Futures 未返回),因此不需要重启 actor 的默认策略。

0 投票
1 回答
169 浏览

scala - 将 Supervisorstrategy 作为具体 Actor 中的 val 覆盖

Scala 中的Actortrait 是这样定义的,

但是我看到具体参与者的所有示例代码都定义如下,

我想了解的是为什么被 supervisorStrategy覆盖为val
为什么不将其覆盖为def?

是因为内存方面的考虑,比如我们不希望每次调用该方法时都进行此评估吗?

0 投票
3 回答
152 浏览

scala - 何时创建 Akka Actor

我有一个 REST 服务,它只服务一个 POST 请求。我想使用演员来处理请求。但是我不知道我是否应该创建一个参与者并使用该参与者派生所有请求,或者我是否应该在每次收到请求时创建一个参与者。这些选择的优缺点是什么。此外,当我创建一个参与者并使用该参与者处理我的所有请求时,它是如何并行执行的。它当然看起来像顺序执行。我也想明白这一点。

0 投票
3 回答
4613 浏览

scala - 如何在scala sbt的资源文件夹下获取加载文件

我在资源下有一个 akka 演员配置文件,

我正在加载如下资源,

1.

2.

当我从主程序执行并获取以下日志时,两者都可以正常工作,

[INFO] [11/21/2016 21:05:02.835] [main] [Remoting] 远程开始;监听地址:[akka.tcp://MediationActorSystem@127.0.0.1:7070] [INFO] [11/21/2016 21:05:02.838] [main] [Remoting] 远程现在监听地址:[akka.tcp ://MediationActorSystem@127.0.0.1:7070]

我正在使用 sbt test:assembly 创建一个 jar 并执行如下 SBT 的主类:

当我从 jar 执行时,它无法加载配置文件。我做错了什么。

0 投票
1 回答
857 浏览

scala - 具有可变大小线程池执行器的 Akka 平衡池

这是我的用例:

我想创建一个大小为 x 的平衡池路由器(x 是在运行时确定的实例/路由的数量),每个路由都有自己的专用线程。每个路由都应该执行阻塞操作。

Akka 文档解释说您不能更改平衡池的调度程序。这消除了使用固定调度程序的选项(这正是我需要的,每个路由大小为 1 的线程池)。

来自Akka 文档

BalancingPool 自动为其路由使用特殊的 BalancingDispatcher - 忽略在 routee Props 对象上设置的任何调度程序。这是为了通过所有路由共享同一个邮箱来实现平衡语义所必需的。

虽然无法更改路由使用的调度程序,但可以微调使用的执行程序。默认情况下,使用fork-join-dispatcher并且可以按照 Dispatchers [AJ:我相信这是一个错字,它们的意思是 fork-join-executor]中的说明进行配置。在期望路由执行阻塞操作的情况下,将其替换为线程池执行器可能会很有用,该线程池执行器显式提示分配的线程数

来自 Akka 文档的配置示例:

池大小与路由数量匹配的线程池执行器似乎可以工作,但问题是:我如何动态(在运行时)设置我的线程池执行器的池大小以匹配路由数量,如果必须在配置中明确设置池大小?

此外,是否可以在从配置中提取其路由的执行程序时创建平衡池(在代码中)?即我不想使用配置来定义我的路由器,我想使用:

但以某种方式指定要使用的执行程序(来自配置),使用与 withMailbox() 或 withDispatcher() 相同的样式

由于平衡调度程序是“驱动:java.util.concurrent.ExecutorService”,是否可以创建一个 ExecutorService 并将其传递给平衡池路由器或其调度程序?

0 投票
1 回答
386 浏览

playframework - 如何在 play framework 2.5.x 中制作“时钟”Akka Actor 系统?

这只是一个解决问题。我成功地在 Play Framework 中创建了一个按固定时间间隔重复的演员。但我想制作一个可以在日期的固定时间进行活动的演员,例如:“12 小时”。

我的第一个解决方案是添加一个Calendar object处理器,并在演员处于活动状态时检查时间。如果时间等于我的设置时间,只需运行我的代码。我认为这是一个可能的解决方案,但不是好的解决方案。日历对象已创建多次,我想尽可能减少Calendar object创建次数。

我在原始文档中找到了其他解决方案:https ://www.playframework.com/documentation/2.5.x/JavaAkka和 SOF 中的其他主题,但不适合我。

任何人都可以帮我解决它,好吗?