问题标签 [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.
scala - Akka 循环:从远程路由向发送者发送响应
我正在使用 Akka Cluster(版本 2.4.10),其中很少有节点被指定为“前端”角色,而其他节点很少被指定为“工人”。工人在远程机器上。传入的工作由前端参与者通过循环路由分配给工作人员。问题是将“工人”的响应发回给前端参与者。我可以看到工作正在由工人完成。但是工人发送到前端的消息没有到达并最终成为死信。我在日志中看到以下错误。
我已经看到了这一点,并且在我的代码中也遵循了同样的方法。我也看过这个,但建议的解决方案不适用于这种情况,因为我不知道预先的路由。它通过配置来实现,并且可以更改。循环路由器配置如下。
路由器在前端actor中实例化,如下所示。
控制器和工人代码如下。
请让我知道我在这里做错了什么。感谢你的帮助。
scala - Akka remote:是否可以使用来自两个不同应用程序但包名不同的类?
我有两个通过 Akka 远程通信的应用程序。
我的第一个应用程序中有一个课程a
:
和我的第二个应用程序中的同一个,但在不同的包中b
:
但是,当我收到带有类实例的演员消息时,由于包名不同,a
我得到了一个。java.lang.ClassNotFoundException: a.A
有没有办法轻松避免这种情况?
scala - 如何使用 Akka 远程处理通过 CLI 向远程参与者发送消息?
我有一个远程演员Bar
和一个本地演员,Foo
. 我想用来在每次调用 CLIFoo
时传递消息。Bar
Bar
可以成功传递消息,但Foo
在等待消息时挂起。为了解决这个问题,我在mainsys.exit(0)
的末尾添加了一个。Foo
这会导致与系统的关联问题Foo
。
如何在连续 CLI 发布之间关闭我的本地演员,而无需手动杀死我的本地演员?
闭嘴,给我密码!
福:
build.sbt
Main.scala
应用程序.conf
酒吧:
构建.sbt
Main.scala
应用程序.conf
运行Foo
,sbt 'run-main Main -m hello'
并Bar
运行sbt 'run-main Main'
。
抱歉,代码很长,但这是我的问题的 MVCE。
我怎样才能实现我想要的行为——CLI 参与者在连续 CLI 调用之间死亡,远程参与者等待新消息。
akka.net - 如何处理陈旧的 akka.net 远程 iactorref
我在长期运行的 Windows 服务中使用 akka.net 中的远程演员。我使用 ActorSelection 为远程参与者获取了一个 IActorRef,并且我在服务中保持这个 IActorRef 活动的时间很长一段时间。IActorRef 指向在另一个 Windows 服务中运行的参与者系统。我知道远程参与者的重新启动不会使远程参与者参考无效。但是,可以想象远程 Windows 服务可能会在某个时候重新启动,并且调用 Windows 服务中的 IActorRef 会变得无效。
处理此问题的最佳做法是什么?一种天真的方法是每次我想调用远程参与者时使用 ActorSelection 来获取一个新的 IActorRef 。这显然是低效的。
另一种方法可能是简单地将我对该 IActorRef 所做的每个调用包装在某种错误处理信封中,该信封捕获异常并使用actorselection 和重试获得新的 IActorRef?或者信封可能会在每次实际调用之前进行测试调用,以查看远程参与者是否还活着,如果没有,则获取新的参与者参考。
有更好的办法吗?
scala - Akka - 集群感知路由器不启动节点
我需要创建一个由 3 个节点组成的集群,其中每个节点将运行一个 actor 的一个实例 - TestActor
。我希望路由器自己创建节点(池),但它创建的第一个节点将是种子节点,因为路由将是集群中创建的第一个参与者。
这是我的代码 TestActor.scala :
和 test.conf :
然后,当我运行程序时,我看不到任何打印,并且消息转到 deadLetters。
这是日志:
scala - 使 Akka 为远程节点生成一个进程
我对 Akka 在创建演员系统时承担的责任感到有点困惑。我想要一个父和两个子actor的简单应用程序,其中每个子actor驻留在不同的进程上(因此在不同的节点上)。现在我知道我可以使用带有远程配置的路由器或者只是启动一个远程参与者,但是(如果我错了,请纠正我)在创建这个远程参与者时,Akka 期望该进程已经存在并且节点已经在其上运行进程,然后它只将该子actor部署到该节点。没有任何方法可以让 Akka 为我们产卵吗?
这是不起作用的代码,因为我自己没有创建该过程:
应用程序.conf:
父级.scala:
和 Child.scala:
但是,如果我在 Parent.scala 上运行 main 之后立即在 Child.scala 中运行这个 main:
然后节点将连接。
如果没有任何方法可以做到这一点,那么当进程崩溃时,Akka 如何重新启动该进程/节点?
scala - 在涉及多个 JVM 的 Akka Streams 中保持背压的方法
我知道从 Akka 2.4.16 开始,没有 Reactive Streams 的“远程”实现。该规范侧重于在单个 JVM 上运行的流。
但是,考虑到用例涉及另一个 JVM 进行某些处理,同时保持背压。这个想法是让一个主应用程序提供一个运行流的用户界面。例如,这个流有一个阶段执行一些应该在不同机器上运行的繁重计算。我对以分布式方式运行流的方法感兴趣 - 我遇到了一些文章指出了一些想法:
- 使用 Akka HTTP ( Stackoverflow )通过 TCP 连接流
- 在一定程度上用动脉简化它(Stackoverflow,Akka 博客)
- 将演员集成到流中(来自 Viktor Klang 的回答,Akka Docs)
还有哪些其他选择?以上有什么明显的缺点吗?有什么特殊的特征需要考虑吗?
更新:这个问题不限于单个用例。我通常对在分布式环境中使用流的所有可能方式感兴趣。这意味着,例如,它可以只涉及一个将参与者集成在一起的流,.mapAsync
或者例如,在通过 Akka HTTP 通信的两台机器上可能有两个单独的流。唯一的要求是必须在所有组件之间强制执行背压。
akka - Akka 集群:为什么我没有收到 Reachable 事件?
我在 Akka 集群中有两个节点。
我订阅了所有ClusterDomainEvent
集群:
当两个节点之一关闭时,我会收到一个Unreachable
事件,并且每隔几秒就会收到一些日志,警告我如下:
当down节点回来时,日志停止,因此检测到该节点再次可达但我仍然没有收到ReachableMember
事件。
我错过了什么?我为什么要接收这个集群事件?
scala - Akka Remoting:用于 org.opencv.core.Mat 的自定义 Kryo 序列化程序
我无法为 org.opencv.core.Mat 对象实现 Kryo 序列化程序,该对象表示例如视频文件的帧。这个想法是 Akka ActorSystem A 将灰度视频帧发送到系统 B 以检测其中的对象(使用akka-remote
,而不是akka-cluster
)。为此,必须对 Mat 类型的帧进行序列化并通过网络发送。但是,它似乎从未真正发送过和/或它阻止发送心跳的参与者导致系统失败。
有什么想法该怎么做吗?
我也在 Github 上问过:https ://github.com/romix/akka-kryo-serialization/issues/110
相关但未回答:kryo 序列化 overstorm
configuration.conf(在系统 A 和 B 上)
de.itd.util.KryoInit.scala(在系统 A 和 B 上)
de.itd.util.MatKryoSerializer(在系统 A 和 B 上)
系统 A 的日志(向系统 B 发送帧)
系统 B 的日志(应该收到系统 A 的帧)
akka - Akka Remote - 防止侦听器端解除关联
假设我们有 A 和 B,配置为远程 (netty.udp)(无集群)。两者都从不同的端口开始。A 中的 Actor 通过路由(使用 RemoteRouterConfig 并通过地址)向 B 中的 Actor 发送消息。他们都得到它并回复。当工作完成时,A 终止。一段时间后,B 记录了一条解除关联消息。
No response from remote. Transport failure detector triggered. (internal state was Open)
Association with remote system [akka.udp://folder@127.0.0.1:2552] has failed, address is now gated for [5000] ms. Reason: [Disassociated]
如果我们再次启动 A 并尝试向 B 参与者发送消息,则消息不会得到任何回复。有没有办法防止这种分离?还是A启动时再次连接的方法?