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

scala - 使 Akka 为远程节点生成一个进程

我对 Akka 在创建演员系统时承担的责任感到有点困惑。我想要一个父和两个子actor的简单应用程序,其中每个子actor驻留在不同的进程上(因此在不同的节点上)。现在我知道我可以使用带有远程配置的路由器或者只是启动一个远程参与者,但是(如果我错了,请纠正我)在创建这个远程参与者时,Akka 期望该进程已经存在并且节点已经在其上运行进程,然后它只将该子actor部署到该节点。没有任何方法可以让 Akka 为我们产卵吗?

这是不起作用的代码,因为我自己没有创建该过程:

应用程序.conf:

父级.scala:

和 Child.scala:

但是,如果我在 Parent.scala 上运行 main 之后立即在 Child.scala 中运行这个 main:

然后节点将连接。

如果没有任何方法可以做到这一点,那么当进程崩溃时,Akka 如何重新启动该进程/节点?

0 投票
0 回答
224 浏览

f# - Akka.NET actor 系统初始化突然抛出 EndpointDisassociatedExceptions。(F#)

我是 Akka 的新手;有一个本地参与者系统与我们网络中另一台机器上的远程系统通信几天,然后它就停止工作了,原因我无法理解。

我知道切断关联不一定是问题(http://petabridge.com/blog/top-7-akkadotnet-stumbling-blocks/中的#6 ),但就我而言,这绝对不是问题这应该会发生。我无法获得远程参与者想要执行的任何工作的结果,并且当我登录远程计算机并查看其输出时,我没有看到任何确认收到我的请求的消息对其进行编码以打印到其控制台。

这就是我在远程机器上看到的,只要我生成actor并将其部署到远程机器(spawne myActorSystem actorName <@ expression @> [ SpawnOption.Deploy (Akka.Actor.Deploy (RemoteScope parsedAddress)) ]):

(见http://www.miloonline.net/stash/akka_remote_error.txt的输出)

我本地系统的配置是:

...在远程机器上:

同样,这些工作正常两三天;我仔细研究了我在 Git 中的代码更改,没有什么可以解释突然和持续的失败。

编辑:最初,我在本地机器remote的块内有 HOCON 配置块。actor我将它移出actor块,现在远程机器上的输出已经改变(我已经编辑了远程输出的块引用以反映这一点)。但是,我仍然看到错误,并且我尝试让远程参与者工作并发送回一个值仍然失败。

编辑:我已将远程参与者系统移至 Windows Server 机器,从而消除了以前的 SocketException 错误。不幸的是,我现在遇到的问题是,在我的远程系统与我的本地系统通信一次会话之后,它在我终止远程进程后就再也无法工作了。任何和所有建立完全相同设置的成功尝试都会导致熟悉的 EndpointDisassociatedException 失败,即使在我重新启动两台机器之后也是如此。(如上所示,远程参与者系统的输出见http://www.miloonline.net/stash/akka_remote_error.txt。)是否有一些标准化的方法来终止或实例化参与者系统来解决这个问题?

0 投票
2 回答
2092 浏览

java - 错误:从 Actor 到 Actor 的消息未传递。[1] 遇到死信。跨集群工作的分布式发布-订阅不起作用

我正在尝试跨不同的集群系统进行分布式发布-订阅,但无论我尝试什么,它都不起作用。

我要做的就是创建一个简单的例子。

1)我创建一个主题,说“内容”。

2)说jvm A中的一个节点创建主题,订阅它,以及发布到它的发布者。

3)在不同的节点上,比如在不同的端口上的 jvm B,我创建了一个订阅者。

4)当我从 jvm A 向主题发送消息时,我希望 jvm B 上的订阅者也接收它,因为它订阅了同一主题。

任何帮助将不胜感激,或者是分布式 pub sub 的简单工作示例,其中订阅者和发布者在不同的集群系统中的不同端口上,在 Java 中。

这是 app1 及其配置文件的代码。

app1.conf

app2 及其配置文件的代码

app2.conf

下面给出的两个应用程序的发布者和订阅者类是相同的。

出版商:

订户:

运行这两个应用程序时,我在接收方应用程序中收到此错误。遇到死信

并在发送方应用程序消息发送成功显示在日志中。

0 投票
0 回答
138 浏览

scala - Akka Remoting:使用 Props.withDeploy(...) 的多个部署配置。

我正在使用 Akka Remote Actor 创建一个示例,RemoteLookupProxyForwarder其定义在 Akka In Action 书中。我的要求就像远程创建一个演员,但使用代码配置。RemoteLookupProxyForwarder就像查找远程参与者系统一样工作,如果参与者系统可用,则创建一个远程参与者,否则等待。

在他的帮助下application.conf,这已经成功地完成了,并且作为方面的行为工作得很好。

但是使用代码的问题是,如果远程参与者不可用,则代理参与者无法查找参与者,并且当消息发送到远程参与者时,所有消息都会发送到死信。

远程代理演员代码:

远程 1 演员系统:

远程 2 演员系统:

使用application.confconfig这个例子运行良好,因为在config中,我们描述了两个部署,但是是代码的情况,仍然无法找到如何定义多个部署。

application.conf配置多个部署:

我的假设是,在代码中,我只定义了一个部署,这就是示例无法按预期工作的方式。那么,我们如何定义多个部署呢?

0 投票
1 回答
902 浏览

c# - Akka.NET:无法向其他 ActorSystem 发送列表消息

我是 Akka.NET 的新手。我最近开始做我的大学项目,遇到了一个奇怪的问题。我在两个不同的桌面应用程序中有两个 ActorSystems。在第一个 ActorSystem 中,我使用 Akka.Remote 在两个 Actor 之间发送消息 ZippedAddressListMessage。

这工作正常,但是当我尝试将此消息发送到其他 ActorSystem 时,我得到了大量的错误列表: 带有错误的控制台窗口的屏幕截图 #1

不过,如果我发送一条仅包含一个整数的简单消息,则一切正常。可能存在序列化问题,但我无法弄清楚它必须如何解决。我到处搜索,但仍然没有找到答案。拜托,你能解释一下如何解决这个问题吗?

来自第一个 ActorSystem 的 Actor:

}

来自其他 ActorSystem 的 Actor:

}

更新: 这是开头错误的屏幕截图。 带有错误的控制台窗口的屏幕截图 #2 它写道 System.String[] 的格式与 JSON 序列化不兼容。

0 投票
1 回答
381 浏览

scala - 通过 akka 远程参与者发送较大消息的性能问题

对远程参与者的并发请求的响应需要很长时间才能响应,即 1 个请求需要 300 毫秒,但 100 个并发请求需要将近 30 秒才能完成!所以看起来请求是按顺序执行的!请求大小很小,但序列化之前在 JVM 中的响应大小约为 120 kB。但是响应具有深层嵌套的案例类。

在同一台机器上的两个不同 JVM 上运行时,响应时间也相似。但是在同一个 JVM(即本地参与者)中响应速度很快。它是向一个远程参与者发出并发请求的单个客户端。

我在 akka 调试日志中看到了这个日志。这说明什么?

调试测试应用程序 akka.remote.EndpointWriter - maxWriteCount:50,fullBackoffCount:546,smallBackoffCount:2,noBackoffCount:1,adaptiveBackoff:2000 的耗尽缓冲区

0 投票
1 回答
178 浏览

scala - Akka 序列化绑定太有限?

是否可以进一步限定序列化绑定?运行时类型似乎太有限了。

例如我有

我现在无法ToDo[MyPayload]使用不同的序列化程序进行序列化ToDo[OtherPayload](即使在不同的 Actors 中!),因为它们的运行时类名称是相等的(PersistentExecutorProtocol$ToDo)。

我错过了什么吗?- 介绍一个AProtocolClass或做PersistentExecutorProtocol一个abstract class没有帮助。

0 投票
1 回答
152 浏览

scala - AKKA:关于程序化远程部署的困惑

我正在使用akka 远程部署。我使用日志记录来确保参与者是否已成功远程部署。这是我的日志信息

看起来演员simple-2555-0.4631423946172286#1386676347是演员的子演员,disjunction并且都托管在同一台机器上(没有远程部署孩子)。而做监督的演员就是演员akka.tcp://adaptiveCEP@127.0.0.1:2555

根据Actor Paths 的顶级范围

“/remote” 是一条人工路径,所有参与者都驻留在该路径之下,其主管是远程参与者引用

我误解了什么吗?

如果需要

Master.scala

参考

在没有新 ActorSystem 的情况下远程创建 Akka actor

0 投票
1 回答
351 浏览

scala - Broadcast message to actors watching a particular actor?

How can I broadcast a message to all actors that are watching a particular actor?

For context, suppose I have a AuctionActor (which is potentially a remote actor) that is being watched by a large number of AuctionParticipantActor types. I would like the AuctionActor to broadcast various messages to AuctionParicipantActor types.

One possibility would be for the AuctionActor to keep a collection of all participant ActorRef instances and then loop over this collection when ever a message needs to be sent to all participants. This seems inefficient and I am hoping for a better solution...

0 投票
2 回答
85 浏览

serialization - 序列化器是从 Akka 消息中删除共享状态的正确位置吗?

我正在研究一种分布式算法,并决定使用 Akka 跨机器扩展它。机器需要非常频繁地交换消息,这些消息引用了每台机器上存在的一些不可变对象。因此,从共享的复制对象不应在消息中序列化的意义上“压缩”消息似乎是明智的。这不仅可以节省网络带宽,而且还可以避免在反序列化消息时在接收方创建重复的对象。

现在,我的问题是如何正确地做到这一点。到目前为止,我可以想到两个选择:

  1. 在“业务层”上处理这个问题,即将我的原始消息对象转换为一些引用对象,这些引用对象用一些符号引用替换对共享、复制对象的引用。然后,我会发送那些引用对象而不是原始消息。将其视为用 URL 替换一些实际的 Web 资源。这样做在编码方面似乎相当直接,但它也会将序列化问题拖入实际的业务逻辑中。

  2. 编写了解共享的复制对象的自定义序列化程序。就我而言,这个解决方案可以通过序列化器将复制的共享对象作为全局状态引入参与者系统。但是,Akka 文档没有描述如何以编程方式添加自定义序列化程序,这是使用序列化程序编织共享对象所必需的。另外,我可以想象有几个原因,为什么不鼓励这种解决方案。所以,我在这里问。

非常感谢!