【问题标题】:PlayFramework -- Look up actors in another local ActorSystemPlayFramework -- 在另一个本地 ActorSystem 中查找演员
【发布时间】:2013-11-06 14:44:35
【问题描述】:

我有一个播放应用程序,其中一些演员位于另一个 ActorSystem 中。我正在尝试从播放应用程序访问该 ActorSystem 中的演员(基本上我将它们连接到 REST API,即当播放应用程序获得 POST 时向他们发送消息)。

我在开始时创建了这个 ActorSystem,我可以从日志中确认它确实开始了。

让我们假设在这个单独的系统中一个actor的路径是akka://my-system/user/my-actor。如何向该演员发送消息?

我试过了:

Akka.system.actorSelection("akka://my-system/user/my-actor") ! SomeMessage(...)

但这不起作用。在日志中,我可以看到以下错误(启用了 deadLetters 日志记录):

Message ... from Actor[akka://application/deadLetters] to Actor[akka://application/deadLetters] was not delivered

为什么它不起作用?我怎样才能让它工作?

非常感谢任何帮助!

【问题讨论】:

    标签: playframework-2.0 akka


    【解决方案1】:

    如果 Akka.system 是“my-system”actor系统,那么您应该可以跳过“akka://my-system”部分,直接进入“/user/my-actor”。

    如果 Akka.system 是另一个参与者系统,那么您可以使用远程处理并指定另一个系统的完整地址,例如“akka.tcp://my-system@my-host:my-port/user/我的演员”。

    【讨论】:

    • 谢谢比约恩!不过这很奇怪。然后你能建议一种不涉及远程处理的方法来做我的想法吗?关键是要在同一台机器上部署一个“核心”系统和一个轻量级“控制”系统(即作为单独的参与者系统)。我的观点是:为什么仅仅因为它是一个不同的actorsystem就强迫我远程处理本地主机......
    • Akka 中没有全局的 Actor 系统注册表,因此无法通过名称查找 my-system。另一方面,如果您将 my-system 演员系统暴露给第一个演员系统,我认为您可以执行 mySystem.actorSelection("/user/my-actor")。
    • 好吧,我猜是有道理的。从我在您的答案和akka doc中的字里行间可以看出,在同一主机上部署两个不同的actorsystem是没有意义的。也许不支持这个用例的原因是因为我试图映射一个actorsystem来进行处理,而另一个单独的系统则用于接口。对我来说,这是一个明显的用例。显然,akka 团队并没有考虑到它,或者它的架构师可能有更好的方法来做我想做的事情。无论如何,我接受你的回答。希望一些 akka 开发者可以看看并给我他们的 2cts...
    • 部署多个actor系统非常有意义,如果您将它们视为多个actor系统,并且唯一“透明”的方式是将它们视为通过远程处理进行通信的系统。顺便说一句,我是 Akka 开发人员 ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-06
    • 2022-11-07
    • 1970-01-01
    • 2020-01-03
    • 2015-06-25
    • 2016-10-12
    • 1970-01-01
    相关资源
    最近更新 更多