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

java - Akka actor system 2.6 在 Play 框架 REST 服务中的使用

我有一个 REST 服务,它有多个相互协调的参与者。数据存储在 postgresDB 中。根据针对类型化 Actor 的新 akka Actor System 2.6,https: //doc.akka.io/docs/akka/2.6/typed/actors.html ,我们需要在 Actor 之间传递消息并基于 Actor 响应的消息。例如,我必须对用户类别进行 CRUD 操作。请求流程为:控制器 -> 参与者 1 -> 参与者 2 -> DAO 响应流程为:DAO -> 参与者 2 -> 参与者 1 -> 控制器

基于这种情况,我有几个问题:

1 我们是否必须为每个参与者设置不同的 onMessages?

  1. 控制器将如何调用actor 1?

  2. 我们是否需要为每条传递的消息创建一个新的 POJO?例如GetCategory、AddCategory。

  3. 每个演员的代码设置不是太多了吗?

0 投票
1 回答
222 浏览

scala - 在同一个规范文件中测试 akka-http 和 akka 演员时,如何解决冲突的演员系统?

我有一个Route使用 akka-http 的定义,它使用内部的演员来发送消息。我的路线如下所示:

我的测试规格:

编译测试失败,因为存在冲突的参与者系统:

覆盖actor系统也无济于事,因为继承的actor系统既有类型的也有无类型的。我怎样才能轻松解决这个问题?

更新:

这与具有不同类型的冲突继承成员有关,但我们可能能够以不同的方式解决我想要在这种情况下实现的目标。

0 投票
1 回答
97 浏览

akka - Actor 消息分配到调度程序线程

众所周知,Dispatcher 线程负责执行参与者消息。使用吞吐量参数,我们可以定义否。在移动到另一个参与者之前由调度程序线程处理的消息

但我不确定调度程序线程将如何选择演员?

比如说,我创建了 10,000 个参与者,其中一次只有 1000 个参与者接收消息,其余 9000 个参与者处于空闲状态,调度程序线程数为 200。

调度程序线程将按照哪个顺序选择参与者的消息。它是否也会检查空闲演员邮箱的消息?

谁能解释调度程序线程选择参与者邮箱消息的流程。

0 投票
1 回答
73 浏览

scala - 通过手动调用构造函数来创建道具对象是否安全且推荐?

我正在尝试熟悉 Akka演员,但我无法解决这两个问题:首先,正如这里所解释的,闭包会导致序列化问题。下面的示例包含一个不可序列化的 Props 对象,因为它关闭了一个不可序列化的对象:

所以建议不要创建这样的Actor。上面的答案与 Akka docs危险变体有关。另一方面,当我们将值类作为构造函数参数处理时, Akka 文档建议通过手动调用构造函数来创建道具,props3下面的代码是一个示例:

这两个概念在我看来是自相矛盾的。顺便说一句,由于我的等级,我无法创建这个问题作为评论。

0 投票
0 回答
36 浏览

akka - java - 如何在java中使用akka actor将消息发布到一个actor实例

我已经使用带有路由器的 RoundRobinPool 创建了 5 个演员实例。如果我输入相同的 2 条消息,它将分配给 2 个演员实例并开始处理。因此,我遇到了一个错误。所以我想一次将一项任务分配给一个实例。有人可以帮我怎么做吗?

0 投票
1 回答
637 浏览

scala - Akka Actors 是如何清理资源的?

我们在使用 Akka HTTP 构建的 Web 服务器上遇到了奇怪的内存行为。我们的架构是这样的:

  1. Web 服务器路由调用各种参与者,获取未来的结果并将其流式传输到响应
  2. 参与者调用非阻塞操作(使用期货),组合和处理从它们获取的数据并将结果传递给发送者。我们使用标准的 Akka 演员,实现其接收方法(不是 Akka 类型)
  3. 应用程序中的任何地方都没有阻止代码

当我在本地运行 Web 服务器时,一开始大约需要 350 MB。第一次请求后,内存使用量跃升至 430 MB 左右,并随着每个请求缓慢增加(使用 Mac 上的 Activity Monitor 进行监控)。但是GC不应该在每次请求后清理东西吗?处理后的内存使用量不应该再次为 350 MB 吗?

我还安装了YourKit java分析器,这是一个头记忆图

.

可见,一旦内存使用量增加,就再也回不去了,系统是无状态的。此外,当我从分析器手动运行 GC 时,它几乎什么都不做,只是内存使用量略有减少。我知道有些服务可能会在第一次请求后缓存东西,暂时消耗内存,但是 Akka Actors 或 Akka HTTP 内部有没有关于这个的策略?

我试图检查离 GC 最远的对象,但它只显示库类和内置类的 Akka,与我们的代码无关。

所以,我有两个问题:

  1. 消息处理后actor如何关闭资源并释放内存?你有过类似的经历吗?
  2. 有没有更好的方法来分析 Akka HTTP,它会告诉我使用离 GC 最远的分类的堆栈跟踪?

附带说明一下,是否建议在 Actors 内使用调度程序(在 Akka HTTP 服务器内运行)?当我这样做时,似乎内存使用量大幅增加,并且应用程序在 DEV 环境中运行我们的内存。

提前致谢,

阿米尔

0 投票
0 回答
63 浏览

scala - 有没有办法使用 Akka Stash 而不是优先邮箱?

在 Akka Actor 应用程序中,我必须在收到控制消息后推迟接收某些类型的消息。为了控制消息,我必须实现自己的优先邮箱,将控制消息优先于普通消息。让我们假设此实现有效且无法撤消。邮箱如下所示,具有重写的入队和出队功能。

我的配置文件也如下所示:

有没有一种方法可以配置我的应用程序,以便我可以使用 akka stash 来存储消息?

0 投票
2 回答
51 浏览

scala - 有没有办法在 akka 应用程序中使用扩展 Actor 类的任意实现方法?

在我的情况下,我有一个带有sendSecureMessage我想在应用程序中使用的方法的 Actor 类(比如 Greeter)。问题是在创建欢迎角色之后,ActorSystem 只为我提供了一个ActorRef引用,Greeter而我不能使用sendSecureMessage该引用。有没有办法可以调用这个函数?

这就是方法class Greeter(message: String, printerActor: ActorRef) extends Actor

这就是我创建演员的方式:

0 投票
1 回答
358 浏览

mongodb - 无法使用 mongodb 在 akka http 中将 scala.concurrent.impl.Promise$Transformation 转换为 scala.collection.immutable.Seq 错误?

基本上我试图使用akka http从数据库中获取数据。如果我直接在 api 中通过 (EmployeeRepo.findAll()) 那么它会显示所有数据,但是在使用 actor 时它会显示转换错误....这里仅用于数据获取的问题请解决

这是我的员工回购-----------------------------------

============EMployeeService------------ 包org.service

------雇员演员-----

---------------员工路线----

=================错误===============

请帮帮我..

0 投票
1 回答
221 浏览

scala - Scala Akka Actors:如何将 Http 响应的结果发送回发送者?

我正在尝试在 Akka Actor 中执行以下 Scala 代码。

当 Actor 收到消息“GetProfiles”时:

1-它向远程服务器发送请求,因此操作结果是 Future[HttpResponse]

2- 如果成功,它会检索响应(一个 JSON 数组)并要求将对象解组为 Array[Profile]。(Profile 模型并不重要)。Unmarshall 方法的结果是 Future[Array[Profile]]

3-如果成功,我想将结果发送回原始发件人!

我设法做到了,但这是一个技巧,因为我将发件人保存在一个变量中,该变量在范围(请求者)中可见。我知道有管道模式,所以理论上我可以将responseAsProfiles对象发送回发送者,但是该对象是在responseFuture对象的 onComplete 方法中创建的(当然,我们必须等待它!)

就是这样!在这种情况下,如何使用管道模式将结果发送回发送者?提前致谢!!!