我有一个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。在文档中说本地参与者可能会失败:
我无法想象这种情况是正确的用例,但也不知道如何从当前参与者的上下文中进行检查(即使只是出于记录目的)。
编辑:AKKA在整个系统中的消息总数上是否有限制?
编辑:发生这种情况的可能性为10%。
编辑:最终发现这是一个被杀死的树上更高的演员。我仍然感到困惑,如果IsNobody()确实死了,为什么它会返回false。