Akka 钩住阿克卡死信

Akka 钩住阿克卡死信,akka,dead-letter,Akka,Dead Letter,根据Akka文件,一个deadletterref是: 死信服务的默认实现,Akka将所有目的地已关闭或不存在的消息路由到该服务 如果我想“点击”演员被解雇后发送的死信,我是否只是“钩住”这个deadletterref,让它传递给我它收到的所有东西?或者我要将其子类化?还是我做了完全不同的事?无论哪种方式,如何?您都可以在事件流中侦听死信事件。大概是这样的: import akka.actor._ class DeadLetterListener extends Actor { overri

根据Akka文件,一个
deadletterref
是:

死信服务的默认实现,Akka将所有目的地已关闭或不存在的消息路由到该服务


如果我想“点击”演员被解雇后发送的死信,我是否只是“钩住”这个
deadletterref
,让它传递给我它收到的所有东西?或者我要将其子类化?还是我做了完全不同的事?无论哪种方式,如何?您都可以在事件流中侦听死信事件。大概是这样的:

import akka.actor._

class DeadLetterListener extends Actor {
  override def preStart {
    context.system.eventStream.subscribe(self, classOf[DeadLetter])
  }

  override def postStop {
    context.system.eventStream.unsubscribe(self)
  }

  def receive = {
    case DeadLetter(msg, from, to) =>
      //handle the deadletter here
  }
}

谢谢@cmbaxter(+1)-那么我的代码何时/何地需要与
死信ActorRef
交互,为什么?它根本不“必须”与它交互。但最终可能会根据您的需求提出案例。也许您有一个特定的用例,它说如果某个特定的参与者不可用,您可以将其消息存储一段时间,直到它返回。你可以用这样的方法来实现。对我来说,我用这个监听器来跟踪死信的发生率,作为我们系统的健康指标。如果死信的发生率上升,这意味着我们的系统可能出了问题再次感谢@cmbaxter(+1)-我保证最后一次跟进!所以当你说“也许你有一个特定的用例,它说如果某个特定的参与者不可用,你会将它的消息存储一段时间……”。那么,您是说,
deadletterref
是持久的,还是说它公开了一个用于恢复历史死信的API?你能再澄清一下你在这里的意思吗?再次感谢!不,它不是持久的。所有的听众都是一个钩子。如果你想要更多的东西,你必须自己去做。你是正确的,因为你通常不必与死信交互,但如果你这样做,你就不正确了,你将死信ref actor子类化。我概述的方法倾听死信流,在结构上与死信ref本身没有直接关系。不过,从那时起,是的,如果你想对数据流做任何有意义的事情,你必须自己滚动它。