AKKA.NET随机将消息发送给死信

时间:2020-03-21 11:35:26

标签: akka.net

我有一个actor系统,该系统由于消息传递到死信而随机失败。失败,表示无法完成

来自的消息[UploadFileFromDropboxSuccessMessage] akka://MySystem-Actor-System/user/...../DropboxToBlobSourceSubmissionUploaderActor/DropboxToBlobSourceFileUploaderActor-1 至 akka://MySystem-Actor-System/user/.../DropboxToBlobSourceSubmissionUploaderActor 未交付。 [5]遇到死信。此日志记录可以是 已关闭或通过配置设置进行了调整 “ akka.log-dead-letters”和“ akka.log-dead-letters-during-shutdown”。

private void InitialState()
{
    Receive<UploadFileFromDropboxMessage>(msg =>
    {
        var sender = Sender;
        var self = Self;
        var parent = Parent;
        var logger = Logger;
        UploadFromDropboxToBlobStorageAsync(msg.File, msg.RelativeSourceRootDirectory, msg.BlobStorageDestinationRootPath).ContinueWith(o =>
        {
            if (!o.IsFaulted)
            {
                parent.Tell(new UploadFileFromDropboxSuccessMessage(msg.File.Path, o.Result), self);
            }
            else
            {
                parent.Tell(new UploadFileFromDropboxFailureMessage(msg.File.Path), self);

            }
        }, TaskContinuationOptions.ExecuteSynchronously);
    });
}

我也尝试过

private void InitialState()
{
    Receive<UploadFileFromDropboxMessage>(msg =>
    {
        try
        {
            var result = UploadFromDropboxToBlobStorageAsync(msg.File, msg.RelativeSourceRootDirectory, msg.BlobStorageDestinationRootPath).Result;
            Parent.Tell(new UploadFileFromDropboxSuccessMessage(msg.File.Path, result));
        }
        catch (Exception ex)
        {
            Parent.Tell(new UploadFileFromDropboxFailureMessage(msg.File.Path, ex));
        }
    });
}

这是随机发生的,在成功和完成上都会发生。我检查了parent.IsNobody()...,这返回false。在文档中说本地参与者可能会失败:

  • 如果邮箱不接受该邮件(例如完整的BoundedMailbox)
  • 如果接收方在处理消息时失败,或者 已经终止

我无法想象这种情况是正确的用例,但也不知道如何从当前参与者的上下文中进行检查(即使只是出于记录目的)。

编辑:AKKA在整个系统中的消息总数上是否有限制?

编辑:发生这种情况的可能性为10%。

编辑:最终发现这是一个被杀死的树上更高的演员。我仍然感到困惑,如果IsNobody()确实死了,为什么它会返回false。

0 个答案:

没有答案