将 actorSelection 与 ask 模式一起用于像 /temp/$a 这样的演员
use actorSelection with ask pattern for actors like /temp/$a
我有一个 ActorSystem(例如 A)生成其他 ActorSystem(例如 B)。当B上来的时候,它知道了A的地址,他就执行了cluster.join()。一旦加入集群,actors 就可以相互通信了。
在我的场景中:
- 我有一个 REST 请求进入 Spray 框架以产生一个新的
ActorSystem.
- 在请求处理程序中,我对 ActorSystem A
做了一个 ask(?)
- "A" 收到消息,我将 ask(?) 请求的地址存储到数据库中。这是一个类似于 "akka://ActorSystemA/temp/$a"
的临时演员
- "A" 使用 ActorSystem "B"
生成一个新的 JVM
"B" 一出现,"A" 就收到 MemberUp 消息。我从 DB 中选择 ask temporary actorRef 并尝试使用
之类的东西发回响应
context.actorSelection("akka://ActorSystemA/temp/$a").resolveOne(3.seconds) !成功
但它不起作用。总是超时
我尝试在临时演员上添加一个手表。 actor没有被终止,我却无法沟通
这种做法正确吗?另外,为什么我总是超时。
原来存储临时引用不是一个好主意。你永远不应该这样做。我改变了我的设计来解决这个问题。
我有一个 ActorSystem(例如 A)生成其他 ActorSystem(例如 B)。当B上来的时候,它知道了A的地址,他就执行了cluster.join()。一旦加入集群,actors 就可以相互通信了。
在我的场景中:
- 我有一个 REST 请求进入 Spray 框架以产生一个新的 ActorSystem.
- 在请求处理程序中,我对 ActorSystem A 做了一个 ask(?)
- "A" 收到消息,我将 ask(?) 请求的地址存储到数据库中。这是一个类似于 "akka://ActorSystemA/temp/$a" 的临时演员
- "A" 使用 ActorSystem "B" 生成一个新的 JVM
"B" 一出现,"A" 就收到 MemberUp 消息。我从 DB 中选择 ask temporary actorRef 并尝试使用
之类的东西发回响应context.actorSelection("akka://ActorSystemA/temp/$a").resolveOne(3.seconds) !成功
但它不起作用。总是超时
我尝试在临时演员上添加一个手表。 actor没有被终止,我却无法沟通
这种做法正确吗?另外,为什么我总是超时。
原来存储临时引用不是一个好主意。你永远不应该这样做。我改变了我的设计来解决这个问题。