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

akka - akka cluster/remoting 在大容量、较慢的订阅者上死了

试图了解当音量增加或所有接收参与者都忙于工作时,AKKA 集群的哪一层会偶尔向死者发送消息,以及如何调整它以消除这种行为。

这是基本拓扑:2 个节点。Node1 由一组参与者(我们称之为发布参与者)和 akka 集群感知路由器组成。发布参与者将消息发布到路由器(RoundRobin),然后路由器将消息路由到 Node2,该节点由工作参与者(不要称他们为订阅参与者)组成,这些参与者参与者接收消息并执行一些工作并回复发布路由器。

观察:在发布消息的高速率(对于 akka 而言,10 秒内 10K 并不高)和订阅者工作人员很忙的情况下,我看到双方偶尔会死去(发布者和订阅者演员回击)。后者的死亡率几乎是 30-40%,但在分析和注意到线程饥饿并为集群配置单独的调度程序和为订阅者工作人员配置 PinnedDispatcher 之后,我们能够将后者的死亡率降低到 1-2%。值得注意的是,当使用带有 for-join 线程池的默认调度程序并且参与者数量高于线程数量时,观察到后者的高死率;当参与者数量少于线程数量时,比率会低得多,这会导致我们惊异于其他 akka 系统处理正在使用 fork-join 池。Ram、GC 和 CPU 看起来都在控制之中。它使用默认的无界邮箱,因此与缓冲区无关。据我所知,akka 不会管理背压

当然,我们确实理解 akka 不保证交付,我们必须实现自己的重试逻辑。这里的主要尝试是了解导致死亡的原因:它是否发生在 akka 远程处理、netty 传输层……,是否有一些可以调整和配置的超时实现。

我花了相当多的时间进行分析,添加额外的日志记录,捕获死后的日志并记录,但没有得到任何关于实际原因的线索。

非常感谢任何提示、尝试的事情或其他信息

这是我们添加的配置:

0 投票
1 回答
726 浏览

akka - akka 聚类中的错误

我正在使用 Akka 集群开发服务,但是当我的程序运行时我收到了这些警告。我有一个 8 节点的 Akka 集群。谁能帮我解决这个错误:

[警告] [06/07/2018 15:08:51.923] [ClusterSystem-akka.remote.default-remote-dispatcher-18] [akka.tcp://ClusterSystem@192.168.2.8:2552/system/endpointManager/reliableEndpointWriter -akka.tcp%3A%2F%2FClusterSystem%40192.168.2.7%3A2552-8] 与远程系统 [akka.tcp://ClusterSystem@192.168.2.7:2552] 的关联失败,地址现在为 [5000] 毫秒. 原因:[Association failed with [akka.tcp://ClusterSystem@192.168.2.7:2552]] 原因:[远程没有响应出站关联。[15000 ms] 后握手超时。]

[警告] [06/07/2018 16:07:06.347] [ClusterSystem-akka.actor.default-dispatcher-101] [akka.remote.PhiAccrualFailureDetector@3895fa5b] 心跳间隔过大:2839 毫秒

0 投票
0 回答
291 浏览

scala - 无法在 docker 容器中启动 AKKA 应用程序

我正在尝试在 docker 容器中启动 akka 应用程序。

以下是 application.conf 的片段

登录服务器开发 | java.lang.UnsatisfiedLinkError:无法加载库。原因:[java.library.path 中没有 leveldbjni64-1.8,java.library.path 中没有 leveldbjni-1.8,java.library.path 中没有 leveldbjni,权限被拒绝] logingestordev | 在 org.fusesource.hawtjni.runtime.Library.doLoad(Library.java:182) logingestordev | 在 org.fusesource.hawtjni.runtime.Library.load(Library.java:140) logingestordev | 在 org.fusesource.leveldbjni.JniDBFactory.(JniDBFactory.java:48) logingestordev | 在 akka.persistence.journal.leveldb.LeveldbStore$class.leveldbFactory(LeveldbStore.scala:52) logingestordev | 在 akka.persistence.journal.leveldb.LeveldbJournal.leveldbFactory(LeveldbJournal.scala:23) logingestordev | 在 akka.persistence.journal.leveldb.LeveldbStore$class.preStart(LeveldbStore. scala:178) logingestordev | 在 akka.persistence.journal.leveldb.LeveldbJournal.preStart(LeveldbJournal.scala:23) logingestordev | 在 akka.actor.Actor$class.aroundPreStart(Actor.scala:522) logingestordev | 在 akka.persistence.journal.leveldb.LeveldbJournal.aroundPreStart(LeveldbJournal.scala:23) logingestordev | 在 akka.actor.ActorCell.create(ActorCell.scala:591) logingestordev | 在 akka.actor.ActorCell.invokeAll$1(ActorCell.scala:462) ActorCell.create(ActorCell.scala:591) logingestordev | 在 akka.actor.ActorCell.invokeAll$1(ActorCell.scala:462) ActorCell.create(ActorCell.scala:591) logingestordev | 在 akka.actor.ActorCell.invokeAll$1(ActorCell.scala:462)

我没有在 docker 容器内以“root”用户身份运行此应用程序。在 DockerFile 中,我还有以下代码行,以特定用户身份运行它

这是在“centos:6.9”图像上。

0 投票
1 回答
743 浏览

sbt - AKKA 集群:在 2 个远程节点之间发送和接收参与者消息

我有 2 个项目(sbt),比如说projectA and projectB。项目A 依赖于项目B。我如何配置 akka 集群,以便两个项目都使用参与者传递消息?projectA 和 projectB 都形成了一个带有种子节点的集群。

0 投票
2 回答
207 浏览

scala - Akka 如何访问集群中的远程参与者

首先我想说我对 Akka 和演员很陌生 :)

我想创建一个分布式应用程序。我会将应用程序拆分为 Web 部分(REST API)和用户管理部分。但是从应用程序的另一部分访问参与者的正确方法是什么?

我知道我可以通过提供地址(https://doc.akka.io/docs/akka/2.5/remoting.html#looking-up-remote-actors)来访问演员选择,但是没有办法我不必使用地址?

我只想创建一个系统,无需使用他们的地址就可以很容易地联系到远程参与者。

0 投票
1 回答
228 浏览

akka.net - 在 Akka.net 集群中的参与者之间传递大字节 []

我是 Akka.net 的新手。我有 2 个演员,一个要求一个字节数组,另一个从数据库中获取它并告诉发件人。如果第二个参与者在远程,它不会将冗长的数组传递给发送者。如果我想将字节数组作为块发送,我可以从第二个参与者循环告诉发送者,但我不知道如何让第一个参与者监听所有块消息并将它们聚合到单个字节数组. 请帮我解决一下这个。

0 投票
1 回答
120 浏览

serialization - Akka Remote 共享课程

我有两个不同的 Java 8 项目,它们将存在于不同的服务器上,它们都将使用 Akka(特别是 Akka Remoting)相互通信。

例如,一个应用程序可能会向另一个应用程序发送Fizzbuzz消息:

我以前从未使用过 Akka Remoting。我假设我需要创建一个第三个项目,一个用于保存共享消息(例如Fizzbuzz和其他)的库/jar,然后将该库作为依赖项拉入两个项目。

就这么简单吗?是否有任何影响这些“共享”消息设计的序列化(或其他 Akka 和/或网络)注意事项?提前致谢!

0 投票
1 回答
55 浏览

akka - 为什么 Akka 不返回地址/主机信息?

Akka 2.5 在这里。我需要确定某个特定ActorRef对象是否与我的应用程序位于同一 JVM 上。我最好的尝试:

...正在true为我返回(它是空的;没有可用的地址/主机信息)。同样,我要做的只是确定someActor(这是一个ActorRef)是否是:(a)在应用程序 JVM 中运行,或者(b)它是否是一个远程参与者,住在另一个 JVM 中并通过 akka-aremote 与我的应用程序通信.

有一个更好的方法吗?我需要在里面配置一些东西application.conf才能让它工作吗?

0 投票
1 回答
199 浏览

c# - 为什么消息中的多个构造函数会导致 Akka.NET 无法传递?

我有一个使用 Akka.NET 远程处理的非常简单的实现。

具体来说,我有两个演员:

在大多数情况下,这些参与者似乎工作正常,问题出在我发送的消息中。

我的消息类大致如下所示:

但是,当我尝试使用此类发送消息时,出现错误

'与远程系统akka.tcp://client@localhost:2552的关联失败;地址现在门控 5000 ms。原因是:[Akka.Remote.EndpointDisassociatedException: Disassociated'

当我删除多个构造函数时,消息发送成功。

我在参考这个问题的文档中找不到任何东西,有人可以向我解释这个限制吗?

任何人都可以提供任何建议的解决方法吗?

0 投票
1 回答
285 浏览

c# - Akka.NET 和 MVVM

我正在尝试在我目前正在开发的新 WPF .NET Framework 应用程序中使用 Akka.NET。

大多数情况下,在您的应用程序中使用演员的过程似乎很容易解释,但是当谈到在应用程序视图级别实际使用演员输出时,我有点卡住了。

具体来说,关于如何在 actor 中处理接收和处理事件,似乎有两种选择。

  1. 使用公开的事件处理程序创建一个参与者。所以也许是这样的:

    /li>

所以基本上你可以创建你的视图并通过做这样的事情来调用任何调用_doActionActor.Tell(new GetStuffRequest());,然后通过事件处理程序处理输出。这运作良好,但似乎打破了 Akka.NET 鼓励的“Actors 'everywhere' 模型”,我不确定这种方法的并发含义。

  1. 另一种方法似乎是让我的 ViewModel 本身就是演员。所以基本上我有一些看起来像这样的东西。

    /li>

通过这种方式,我可以直接在演员本身(实际上是我的视图模型)中处理演员事件。

我在尝试这样做时遇到的问题是正确配置我的 Ioc (Castle Windsor) 以正确构建 Akka.NET 实例。

所以我有一些代码来创建看起来像这样的 Akka.NET 对象

这在实际创建实例时效果很好,IActorRef但不幸的是我无法将演员引用转换回我需要的实际对象(在这种情况下BaseViewModel)。

因此,如果我尝试这样做,return (BaseViewModel)result;我会得到一个无效的强制转换异常。这显然是有道理的,因为我得到的IActorRef对象不是BaseViewModel.

所以总而言之,我希望得到两个问题的答案。

  1. 在 MVVM 应用程序中处理 Akka.NET Actor 的最佳方式是什么,特别是在处理接收到的消息和处理显示输出时。

  2. 有没有办法正确配置我的 Ioc 系统以创建IActorRef实例并将其添加到系统但返回实际父演员对象的具体实现的实例BaseViewModel