Akka.net ActorSystem.AwaitTermination在没有发送消息时触发DeathWatchNot
本文关键字:消息 DeathWatchNot ActorSystem net AwaitTermination Akka | 更新日期: 2023-09-27 18:20:22
此消息是在最简单的Akka.net示例应用程序中写入控制台的。
【信息】【2015年3月11日下午7:21:06】【线程0008】[akka://TestActorSystem/user]来自的消息死亡监视通知akka://TestActorSystem/user到akka://TestActorSystem/user未送达。1个死信遇到。
这是一个非常简单的代码,你所做的只是创建一个参与者,但你永远不会发送任何消息。
using System;
using Akka.Actor;
namespace AkkaNetTest {
class Program {
static void Main(string[] args) {
ActorSystem testActorSystem = ActorSystem.Create("TestActorSystem");
Console.WriteLine("Actor system 'TestActorSystem' created");
IActorRef testActor = testActorSystem.ActorOf<TestActor>("Test");
Console.WriteLine("Press a key to shutdown the 'TestActorSystem' actor system");
Console.ReadKey();
Console.WriteLine("Attempting to shutdown the actor system");
testActorSystem.Shutdown();
Console.WriteLine("Waiting for the actor system to terminate.");
testActorSystem.AwaitTermination();
Console.WriteLine("Actor system shutdown, press any key to exit");
Console.ReadKey();
}
}
public class TestActor : ReceiveActor { }
}
我运行的环境是:
- Windows 10 RTM内部版本10240
- Visual Studio 2013更新5
- Akka.Net通过NeGet 1.0.4.12
- 目标框架.NET 4.5
- 安装framework.NET 4.5.2
- 控制台应用程序
- 任何CPU
当您运行这个简单的应用程序时,一旦进行ActorSystem.AwaitTermination()
调用,就会出现上面的Akka.net输出。
它出现在我试图创建的所有Akka.net应用程序中,我能够在这个简单的应用程序中复制它。因此,如果我发送消息或不发送消息,总会发生这种情况。如果您注释掉IActorRef
行,那么您将不会得到消息,因为没有创建任何参与者。
为什么会发生这种事,这没有任何意义。如果有人能帮助解释为什么会发生这种情况,以及如何在没有发送消息的情况下防止这种情况发生,我将不胜感激。
您正在调用testActorSystem.Shutdown();
-这将关闭ActorSystem
。这会杀死所有参与者,包括内置的系统参与者,因此DeathWatchNotification
会作为关闭和清理过程的一部分被激发。在这种情况下,您看到的消息/user guardian actor正在关闭自己,但由于它正在关闭,因此无法传递。
正如文档所解释的,这不是一个bug,也没有什么可担心的:http://getakka.net/docs/concepts/message-delivery-reliability#dead-通常不令人担忧的字母
要防止此错误,您必须执行以下操作,直到他们将默认日志记录级别修复为WARNING(警告)。
将以下内容添加到您的应用程序配置中,INFO日志消息就会消失@Aaronontheeb在错误报告中表示,这条消息"没什么好担心的"。
<configuration>
<configSections>
<section name="akka"
type="Akka.Configuration.Hocon.AkkaConfigurationSection, Akka" />
</configSections>
<akka>
<hocon>
<![CDATA[
akka {
loglevel = WARNING
}
]]>
</hocon>
</akka>
</configuration>