AKKA.NET actor系统在asp.net核心应用程序中没有正确关闭

时间:2016-09-12 19:22:25

标签: asp.net-core akka.net

我在我的asp.net核心应用程序(框架net46)中运行我的AKKA.NET actor系统。我通过运行“dotnet run'”从命令提示符运行Web应用程序。当我尝试使用ctrl-c退出它时,我得到以下输出并且提示符挂起:

                c:\D3\>19:05:33.7024266 ENV=d0 Sdm.Web DEBUG Akka.Actor.Internal.ActorSystemImpl  Disposing system
            19:05:33.7084292 ENV=d0 Sdm.Web DEBUG Akka.Actor.Internal.ActorSystemImpl  System shutdown initiated
            [DEBUG][12/09/16 19:05:33][Thread 0023][EventStream] subscribing [akka://all-systems/] to channel Akka.Event.Debug
            19:05:33.7134423 ENV=d0 Sdm.Web DEBUG Akka.Actor.GuardianActor  Stopping
            [DEBUG][12/09/16 19:05:33][Thread 0023][EventStream] subscribing [akka://all-systems/] to channel Akka.Event.Info
            [DEBUG][12/09/16 19:05:33][Thread 0023][EventStream] subscribing [akka://all-systems/] to channel Akka.Event.Warning
            [DEBUG][12/09/16 19:05:33][Thread 0023][EventStream] subscribing [akka://all-systems/] to channel Akka.Event.Error

如果我点击另一个ctrl-c就会退出。但它看起来并不正确。

我使用依赖注入容器来管理actor系统的生命周期(singleton-scope),所以我假设容器实际上是在应用程序关闭时尝试处理对象。

有人可以提出可能出错的地方吗?

1 个答案:

答案 0 :(得分:2)

如果想要正常关闭,则需要直接停止Akka.NET Actors。为此,请使用ASP.NET Core通过IApplicationLifetime接口提供的应用程序关闭事件:

CancellationToken ApplicationStopping { get; }
CancellationToken ApplicationStopped { get; }

可以在IApplicationLifetime方法的Startup.cs期间获取Configure的实例:

protected void DisposeResources()
{
    //Cleanup stuff when the app is shutting down
}

public void Configure(IApplicationBuilder app, IApplicationLifetime applicationLifetime)
{
    //register the application shutdown handler
    applicationLifetime.ApplicationStopping.Register(DisposeResources);
}

有关详细信息,请参阅文章ASP.NET Core application shutdown events 这个问题Kestrel shutdown function in Startup.cs in ASP.NET Core