У меня есть система актера, которая случайно выходит из строя из-за того, что сообщения доставляются мертвыми буквами. Ошибка, означающая, что она просто не завершается MySystem-Actor-System / user /.../ DropboxToBlobSourceSubmissionUploaderActor не был доставлен. [5] встречаются мертвые буквы. Эту регистрацию можно отключить или настроить с помощью параметров конфигурации «akka.log-dead-letters» и «akka.log-dead-letters-во время завершения работы».
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. В документации говорится, что alocal субъект может потерпеть неудачу:
- , если почтовый ящик не принимает сообщение (например, полный BoundedMailbox)
- , если принимающий субъект не работает во время обработки сообщения или является уже завершено
Я не могу представить вариант использования, где это правда, но я также не знаю, как проверить из контекста моего текущего актера (даже если это только для целей регистрации).
РЕДАКТИРОВАТЬ: Есть ли у AKKA ограничение на общее количество сообщений во всей системе?
РЕДАКТИРОВАТЬ: Это происходит 1, скажем, в 10% случаев.
РЕДАКТИРОВАТЬ: В конечном итоге обнаружил, что это был актер waaay выше в дереве, которое убивают. Я до сих пор не понимаю, почему IsNobody () вернул false, если он действительно мертв.