akka 如果被分片的执行者A询问另一个执行者B,但A在B响应之前被重新定位,会发生什么?

2wnc66cl  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(133)

假设我们有两个节点,节点1包含参与者A,节点2包含参与者B。
假定两个行动者之间的通信是这样实现的:

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回复的“询问”的“未来”发生了什么?我假设自从节点死亡后,“未来”不再存在。实际上,B的回复将变成死信。
我的理论正确吗?

tpgth1q7

tpgth1q71#

context.ask并不会产生一个未来,而是一个经过调整的信息。由于ActorContext并不知道这个参与者只是一个簇碎片化实体的化身,所以你的基本直觉是有效的:来自B的回复将不会被传递。

相关问题