在Akka重新发送一封死信

时间:2017-02-14 02:37:35

标签: akka

我有一群演员互相发送大量信息。这些actor的默认队列很可能会导致很多actor耗尽内存。

理想情况下,这就是我想要发生的事情:

  1. A发送给B
  2. B说“我太满了字母L。”
  3. A被告知这一点,并存储L(可能在硬盘中)。 A继续工作。
  4. 一旦A闲置,他会回顾任何字母并找到像L这样的字母,其中演员(例如B)太满而无法使用。
  5. A尝试将L重新发送给B
  6. 流程不断重复。
  7. I have read我需要切换到阻塞队列。我的印象是,如果AB发送邮件,但B的邮箱已满,B会说“我已满”并导致超时。然后会将其发送到名为DeadLetterActorRef的{​​{1}}。

    问题在于使Akka的“死信范式”适应上述步骤。在第3步,我需要一种方法告诉D它失败了,这封信应该保存以供日后使用。看来你通过让他们Asubscribe事件总线来“告诉”这些演员。这迫使我让每个演员订阅DeadLetter事件总线。如果DeadLetter无法发送消息且A无法发送消息,则BA的消息将被发送到B队列,并且两者都有通过彼此的死信来找出他们需要的那个。这似乎效率低下。有没有更好的方法来解决这个问题?

    注意:我想要对死信进行负载均衡,有些文章建议使用死信队列。

1 个答案:

答案 0 :(得分:2)

您正在寻找的行为称为“背压”。 在使用akka流支持的akka​​中,请参阅此演示文稿 https://www.lightbend.com/blog/understanding-akka-streams-back-pressure-and-asynchronous-architectures