问题标签 [akka-remoting]

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

scala - 如何正确使用 DI 注入 Play 控制器的构造函数?

我正在将 Play 2.3.x 应用程序迁移到 Play 2.5.x,并且在使用依赖注入时遇到了一些问题。

在 2.3 中,我有一个特征HasRemoteActor,控制器将混合其中以根据配置引用某个远程参与者。由于这需要应用程序的配置对象,因此现在需要将其变成一个类,以便可以注入配置。这是我的尝试:

但是,当我启动我的应用程序时,我发现无论端口号如何,actor 系统总是无法找到它的端口(即使没有在该端口上监听)。

注入的时间似乎有问题,但我对 DI 太陌生了,我在调试它时遇到了麻烦。

我尝试向我的注入路由的关联控制器添加routesGenerator := InjectedRoutesGenerator前缀build.sbt@但仍然发现相同的运行时异常。

有人有建议吗?

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 投票
0 回答
58 浏览

java - Akka 集群感知路由器有时会传递消息

我相信我的配置有问题。请考虑以下设置:

在“接收者”节点上:

在“处理器”节点上(它具有“处理器”角色):

(我正在使用 Spring Extension 来创建演员,但我相信在这种情况下并不重要)

问题是,当我从 Receiver 节点参与者发送消息时:

Akka 仅有时会传递此消息。这里我可以在日志中看到:

当我从“接收者”节点直接向该路由器发送消息时,所有消息都成功传递到“处理器”:

找不到集群感知路由器配置的问题。请帮我!

0 投票
1 回答
108 浏览

akka - 来自 RemoteDeadLetterActorRef 的 SelectChildName 消息

我有两个通过 akka 远程通信的演员系统。

当我查看 JVM 堆时,我看到(太多)akka.dispatch.Envelope包含SelectChildName来自akka.remote.RemoteActorRefProvider$RemoteDeadLetterActorRef.

这些消息的保留堆非常大,会导致内存问题。

SelectChildName这些消息的目的是什么?有没有办法避免它们?

仅供参考,这似乎与两个参与者系统之间发生的解除关联错误有关。

谢谢,迈克尔

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 文档没有描述如何以编程方式添加自定义序列化程序,这是使用序列化程序编织共享对象所必需的。另外,我可以想象有几个原因,为什么不鼓励这种解决方案。所以,我在这里问。

非常感谢!

0 投票
2 回答
378 浏览

java - akka 序列化字节缓冲区 - java.lang.UnsupportedOperationException

我需要一些帮助来序列化一个实体以通过 Akka Remote 发送它。

这是序列化程序类:

我在第 5 行得到以下异常

这是我发送给远程参与者的消息:

奇怪的是它以一种方式工作,如果我们使用它发送消息,它在接收器中工作正常:

但是当我们使用 then 重播给发送者 actor 时, getSender().tell(m, getSelf());我们得到了异常。

我们正在使用 Java 1.8 和 akka-remote_2.11:2.5.3

提前致谢!罗德里

0 投票
2 回答
1101 浏览

java - 在 docker 实例上使用带有动脉的 akka 远程处理时出错

首先,对不起我的英语。谷歌翻译对我帮助很大,哈哈。

我的问题是这样的:

我有两个使用akkaand开发的示例项目java:example-remote-client.jar 和 example-remote-server.jar

我正在使用动脉序列化,并且我正在尝试通过 akka-remoting 从客户端向服务器发送消息。

执行此操作的客户端参与者是:

我的客户端配置:

服务器演员很假,我认为没有必要在这里粘贴。但它的配置是:

两个 jar 都部署在运行在同一“192.168.0.250 机器”上的 docker 实例上,如下所示:

服务器启动正常,日志如下:

但是当我尝试启动客户端时,出现以下错误:

我还尝试使用这些“ActorSelection 路径”发送消息:

"akka://server@192.168.0.250:5001/user/server-process" "akka://server@localhost:5001/user/server-process" "akka://server@192.168.0.250:10001/user /server-process" "akka://server@localhost:10001/user/server-process"

但错误仍然出现。

同样重要的是要澄清服务器参与者的参与者路径是:

akka://server/user/server-process

什么不见​​了?我正在使用 akka 2.5.3 版本...

谢谢。

0 投票
0 回答
200 浏览

java - 无法访问的远程 akka 演员

我正在尝试向尚未提出的演员发送消息。当我这样做时,我在控制台上看到以下消息,但是如何以编程方式/通过配置捕获此错误。

这是我的系统初始化部分代码:

消息发送代码:

基本上,在我知道远程参与者不可用(或未运行)而不是等待超时后,我会立即尝试恢复。