Akka失败恢复:门控状态

时间:2016-10-05 12:53:15

标签: akka distributed-computing actor

akka documentation表示如果与远程系统的链接处于门控状态,则会丢弃所有出站消息。这是否意味着他们会立即被送到死信,或者如果州变为隔离状态,他们只会被送到死信?

日志是关于隔离状态的,但不是门控状态:

Association with remote system [...] has failed,
address is now gated for [5000] ms. Reason: [Disassociated]

Association to [...] having UID [...] is irrecoverably failed.
UID is now quarantined and all messages to this UID will be delivered to dead letters. 
Remote actorsystem must be restarted to recover from this situation.
  • 如果远程系统由于入站连接成功而从门控状态转换为活动状态,是否会重新发送所有丢弃的出站消息?

  • 远程操作员上注册的DeathWatch是否足以检测丢弃的消息,或者我是否需要单独处理封闭(但不是隔离)系统的消息失败?

1 个答案:

答案 0 :(得分:3)

虽然封闭所有消息都会进入deadletter,但它们不会被缓冲并以任何方式重新发送 - 换句话说,如果您希望在演员中需要为此添加额外的逻辑,则无法保证交付(相关部分)文档:http://doc.akka.io/docs/akka/2.4/general/message-delivery-reliability.html

DeathWatch可以避免向已经死亡的演员发送消息,但是不能保证你在演员收到终止消息之后但是在演员收到终止消息之前没有发送消息。这不足以建立交付保证。

根据您的需要,实施传递保证可以像远程演员的简单确认协议一样“轻松”,或者作为AtLeastOnce(文档:http://doc.akka.io/docs/akka/2.4/scala/persistence.html#at-least-once-delivery-scala)的“重”来处理节点在没有丢失消息的情况下崩溃。