问题标签 [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 回答
770 浏览

scala - 检查akka集群中是否存在actor

我遇到了一个场景,我需要检查特定演员是否存在,这可以通过 ActorSystem.actorSelection 方法通过指定演员路径来完成。

但是,当您的本地节点上存在此类参与者时,此方法可以正常工作。如果actor-system由多个节点组成,并且actor存在于另一个节点上,则该方法告诉actor不存在。如果我给出指定远程演员系统的字符串,那么此方法有效。但是,在 actorSelection 方法中指定远程 actor-system 字符串似乎不是一个好主意,因为集群中的节点可以加入和离开。

当演员存在于本地节点上时,上面的代码工作正常,为了检查演员是否存在于集群中的另一个节点上,我必须执行以下操作:



有没有更好的方法来检查整个akka-cluster中是否存在actor而不仅仅是本地节点?

0 投票
1 回答
657 浏览

scala - 重试长寿 akka 演员的小例外

我有一个在应用程序启动时作为另一个actor的子级创建的actor,并且每天从父级接收一条消息,以执行从某个SFTP服务器获取一些文件的操作。

现在,可能有一些小的临时连接异常会导致操作失败。在这种情况下,需要重试。

但是可能会抛出异常并且在重试时不会解决(例如:找不到文件,某些配置不正确等)

因此,在这种情况下,考虑到参与者将在很长一段时间后(每天一次)接收消息,什么可能是适当的重试机制和监督策略。

在这种情况下,发送给actor的消息不是错误的输入——它只是一个触发器。例子:

如果我在父母中有这样的监督策略,它将在每个次要/主要异常上重新启动失败的孩子而不重试。

我想要的是这样的:

0 投票
2 回答
55 浏览

scala - 为什么我不能在akka集群分发数据示例中使用大写作为var的第一个字符

我正在尝试https://doc.akka.io/docs/akka/current/distributed-data.html#using-the-replicator上的官方示例 (此页面上的第一个 scala 示例)
但是当我更改时它似乎很奇怪我的代码一点点。

我录制了一个视频我在代码中所做的更改。我所做的唯一更改是第 16 行的变量名称。从 DataKey 到 dataKey。我只是重命名了它。 https://photos.app.goo.gl/CZrnNZlW85e9MaF73

现在的问题是它为什么会发生。
在这个例子中,我不能使用大写作为 var 的第一个字符???
请帮我弄清楚。非常感谢。

Akka 版本:2.5.9
Scala 版本:2.11.12
IDE:IntelliJ IDEA 2017.3.3 社区版

0 投票
1 回答
1057 浏览

scala - 如何在有服务的 Akka 演员中使用 http 客户端?

我有一个 akka 演员,我想在该演员中使用一个简单的服务。该服务应使用客户端 api 的singleRequest 方法从本地网络获取某些内容。

我的演员:

在这里,我还创建了一个 ActorSystem 和一个 ExecutionContext,以便我的服务可以使用它:

如果我没有将 executionContext 传递到服务中,我会收到错误消息:

如果我没有将 actorsystem 传递到服务中,我会收到错误消息:

问题:

  • Actor 应该如何正确使用服务?
  • 传递 ActorSystem 和 ExecutionContext 是否正确,为什么它不会在幕后发生?
0 投票
1 回答
257 浏览

scala - 如何在scala中使用同步

我正在创建一个演员,我想第一次创建它,然后在需要该演员时使用它的演员参考。这是代码

Q1->这是实现我想要的功能的正确方法吗?我遇到的问题是,无论何时在两个地方同时调用此代码。

它抛出两个不同的异常:

和:

我尝试使用this.synchronized但没有帮助,当我多次调用此方法时出现问题

如何创建一次actor并一次又一次地使用它的actorRef而不再次创建它?

0 投票
1 回答
148 浏览

scala - 如何将参数传递给 Scala 对象

我只想创建一次演员并一次又一次地在应用程序中使用它的引用。为此,我创建了一个 Scala 对象,一切正常,但是当我尝试使用子演员时,我得到了NullPointerException. 这是代码:

当我想实例化一个子actor时会出现问题。这是代码:

实例化时ParentTestActor抛出

请帮助我如何解决这个问题。

0 投票
1 回答
443 浏览

java - 错误 - ReceiveBuilder 处的构建方法编译错误,类型 scala.Product 无法解析

我是 Akka-Actor 的新手。

尝试运行简单的 akka-actor 程序来理解 akka-actor。

我无法解决两个编译错误。

下面是实际代码。

AkkaActor 计划:

AkkaActor 版本 2.4.9。

在我的 pom.xml 设置下方。

0 投票
0 回答
103 浏览

scala - akka tcp server-client heartbeat message block by scheduler 处理

我正在使用 Akka 集群(服务器)并每 5 秒使用 Akka TCP 与客户端交换 HeartBeat 消息。

HeartBeat 工作正常,直到我不使用调度程序。但是当我启动 4-5 个调度程序时,服务器没有从客户端(tcp 连接)接收到心跳缓冲区消息。调度程序处理后,我同时收到 4-5 条心跳消息。

Akka 调度程序正在阻止 Actor 的其他处理(缓冲区读取等)。

我已经在下面尝试过,但仍然面临同样的问题。

  1. 不同的 2 调度程序
  2. 创建了新的演员并在单独的演员中添加了调度程序调用。
  3. 使用8核机
  4. 试过fork-join-executorthread-pool-executor
  5. 已经尝试更改Tcp-SO-ReceivedBufferSizeTcp-SO-SendBufferSize1024 或 2048,但没有成功。
  6. 已经尝试过Tcp-SO-TcpNoDelay

请帮忙。

0 投票
1 回答
512 浏览

scala - Scala 流式传输实时/正在增长的文件

我的 Scala 应用程序启动了一个将文件写入磁盘的外部进程。在一个单独的线程中,我想读取该文件并将其内容复制到一个,OutputStream直到该过程完成并且文件不再增长。

有几个边缘情况需要考虑:

  1. 当线程准备好启动时,该文件可能还不存在。
  2. 线程的复制速度可能比进程写入的速度快。换句话说,它可能会在文件仍在增长时到达文件末尾。

顺便说一句,我可以向线程传递一个processCompletionFuture变量,该变量指示文件何时完成增长。

有没有一种优雅而有效的方法来做到这一点?也许使用 Akka Streams 或演员?(我已经尝试使用 Akka Stream 关​​闭FileInputStream,但是一旦输入流中没有更多字节,流似乎就终止了,这种情况发生在 #2 的情况下)。

0 投票
1 回答
134 浏览

java - 如何有意义地记录演员设计

我对 akka/actor 系统很陌生,并尝试理解同事编写的代码。
这样做,我问自己什么样的文档有助于更快地理解实施的“演员系统”。
据我所知,您需要至少了解系统的两个不同视角才能理解它。

  • 首先是静态的“创作层次”,主要定义演员之间的父子关系。
  • 第二个是动态的“消息/事件流”,主要定义参与者之间交换的消息。作为一种特殊情况,它还包括已实现的有限状态机。

所以,我想知道是否有关于如何记录参与者系统的常见最佳实践:

  • 应该记录什么样的观点?
  • 是否有关于如何构建代码的推荐方法(例如将父子关系反映为包结构)?
  • 命名约定?
  • 能够解析代码并提供一些文档的工具?
  • ...