【问题标题】:What happens if a sharded Actor A asks another Actor B but A is relocated before B responds?如果分片的 Actor A 询问另一个 Actor B 但 A 在 B 响应之前被重新定位,会发生什么?
【发布时间】:2021-01-30 13:47:27
【问题描述】:

假设我们有两个节点。节点 1 包含演员 A,节点 2 包含演员 B。

假设两个actor之间的通信是这样实现的:

val B_ref = sharding.entityRefFor(BTypeKey, B_ID)

//inside A

context.ask(B_ref, message(replyTo =_) {
   //... Translate B reply to A command
}

消息发送后,节点 1 死亡,演员 A 被重新定位。等待 B 回复的 Ask 的“Future”会发生什么?我假设由于节点死亡,未来不再存在。实际上,B 的回复将落空。

我的理论正确吗?

【问题讨论】:

    标签: akka akka-cluster akka-persistence


    【解决方案1】:

    context.ask 不会产生未来,而是产生适应的信息。因为ActorContext 不知道这个actor 只是集群分片实体的化身,所以你的基本直觉是有效的:B 的回复不会被传递。

    【讨论】:

      猜你喜欢
      • 2017-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-29
      • 2016-12-27
      • 2021-10-06
      • 1970-01-01
      • 2017-04-06
      相关资源
      最近更新 更多