我有一些演员会在空闲或其他系统限制要求他们自杀时自杀。收到ActorRef
的演员正在监视他们的Terminated(ref)
,但是在竞争终止之前,有一种竞争条件是要发送给演员的消息,我正在努力寻找干净的方法。处理方式。
我正在考虑订阅DeadLetter
,并用它来通知发件人他们的ref
是陈旧的,并且他们需要获取或产生新的目标ActorRef
。
但是,在Akka Typed中,除了使用非类型化的共存路径之外,我找不到其他方法来解决问题,所以我认为我很可能会遇到这种错误。
是否存在一种更好的模式来处理死掉的下游ref并将消息重定向到新的下游ref,而不需要为每条消息进行某种形式的确认握手?
答案 0 :(得分:0)
将死信视为调试工具,而不是用于实现交付保证的东西(对于Akka输入和未输入都是true)。
如果行动者需要确定消息已传递,则消息协议将需要包含确认。要重新发送actor,还需要为正在运行/尚未确认的消息保留一个缓冲区,以便能够重新发送。
我们对消息传递的不同可靠性级别的抽象有一些想法,我们将看看它是否适合Akka 2.6或以后发生,其原型为:https://github.com/akka/akka/pull/25099