Akka 参与者被停止后,排队的消息会去哪里

Akka 参与者被停止后,排队的消息会去哪里,akka,dead-letter,Akka,Dead Letter,所以我理解,如果你给一个死去的演员发送一条消息,消息就会转到DeadLetters,但是对于已经排队等待那个演员的消息会发生什么呢。他们是否也会被转发到那里,还是会迷路?一般来说,你不能对死信的投递做出太多假设。作为: 无法传递且可以确定的消息将被传递给名为/deadLetters的合成参与者。该交付是在尽最大努力的基础上进行的;它甚至可能在本地JVM中失败,例如在参与者终止期间。通过不可靠的网络传输发送的消息将丢失,而不会显示为死信 然而,看起来Akka确实在努力转发已经排队等待演员的死信消息

所以我理解,如果你给一个死去的演员发送一条消息,消息就会转到DeadLetters,但是对于已经排队等待那个演员的消息会发生什么呢。他们是否也会被转发到那里,还是会迷路?

一般来说,你不能对死信的投递做出太多假设。作为:

无法传递且可以确定的消息将被传递给名为/deadLetters的合成参与者。该交付是在尽最大努力的基础上进行的;它甚至可能在本地JVM中失败,例如在参与者终止期间。通过不可靠的网络传输发送的消息将丢失,而不会显示为死信

然而,看起来Akka确实在努力转发已经排队等待演员的死信消息。这是中的一个片段,在actor关闭后调用该片段:

/** *用于清理邮箱的可重写回调, *取消注册参与者时调用。 *默认情况下,它会将所有系统消息+消息排出队列,并将它们发送到所属参与者的系统死信邮箱 */ 受保护的[dispatch]def清理:装置= 如果actor ne null{//actor对于deadLetterMailbox为null val dlm=actor.dispatcher.mailboxs.deadLetterMailbox var messageList=systemDrainnew latestfirstsystemmessagelistnessage 而messageList.nonEmpty{ //消息必须是“处女”才能再次排队 val msg=messageList.head messageList=messageList.tail msg.unlink dlm.systemEnqueueactor.self,msg } 如果messageQueue ne null//调用从不调用Mailbox.run的ReadDispatcher需要 messageQueue.cleanUpactor.self、actor.dispatcher.mailboxes.DeadLetterMailboxe.messageQueue } }
一般来说,你不能对死信的投递做太多假设。作为:

无法传递且可以确定的消息将被传递给名为/deadLetters的合成参与者。该交付是在尽最大努力的基础上进行的;它甚至可能在本地JVM中失败,例如在参与者终止期间。通过不可靠的网络传输发送的消息将丢失,而不会显示为死信

然而,看起来Akka确实在努力转发已经排队等待演员的死信消息。这是中的一个片段,在actor关闭后调用该片段:

/** *用于清理邮箱的可重写回调, *取消注册参与者时调用。 *默认情况下,它会将所有系统消息+消息排出队列,并将它们发送到所属参与者的系统死信邮箱 */ 受保护的[dispatch]def清理:装置= 如果actor ne null{//actor对于deadLetterMailbox为null val dlm=actor.dispatcher.mailboxs.deadLetterMailbox var messageList=systemDrainnew latestfirstsystemmessagelistnessage 而messageList.nonEmpty{ //消息必须是“处女”才能再次排队 val msg=messageList.head messageList=messageList.tail msg.unlink dlm.systemEnqueueactor.self,msg } 如果messageQueue ne null//调用从不调用Mailbox.run的ReadDispatcher需要 messageQueue.cleanUpactor.self、actor.dispatcher.mailboxes.DeadLetterMailboxe.messageQueue } }