【问题标题】:Akka Failure Recovery: Gated StateAkka 故障恢复:门控状态
【发布时间】:2016-10-05 12:53:14
【问题描述】:

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 是否足以检测丢失的消息,还是我需要单独处理封闭(但不是隔离)系统的消息失败?

【问题讨论】:

    标签: akka distributed-computing actor


    【解决方案1】:

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

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

    根据您的需要,实现交付保证可以像与远程参与者的简单确认协议一样“轻”,或者像 AtLeastOnce(文档:http://doc.akka.io/docs/akka/2.4/scala/persistence.html#at-least-once-delivery-scala)那样“重”,它将处理节点崩溃而不会丢失消息.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-26
      • 1970-01-01
      • 2012-01-28
      • 2014-06-27
      • 2013-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多