AKKA.NET 在 ASP.NET 中还是在控制台应用程序中?

AKKA.NET in ASP.NET or in console app?

我正在尝试将 AKKA 集成到使用框架 net46 上的 ASP.NET Core 构建的 IoT 应用程序中。我正在尝试找到最好的方法,并希望对这个问题有任何评论,尽管它有点长。 Java 和 AKKA.NET 中基于 AKKA 经验的评论都是相关的。

简而言之,我需要 AKKA.NET 从远程设备接收物联网消息并执行相当复杂的处理逻辑。

对于 IoT 通信,我们使用 Azure IoT 中心。 IoT 消息由多线程控制台应用程序按照 Microsoft 此处的指南使用:

https://azure.microsoft.com/da-dk/documentation/articles/iot-hub-csharp-csharp-process-d2c/

同时,我们运行正在使用依赖注入和所有最新的最佳实践来构建标准 ASP.NET 核心(框架 net46)应用程序。

我需要 AKKA.NET 接管 IOT 消费者应用程序内部进行的部分处理以及 ASP.NET 应用程序内部进行的部分处理。

我看到了以下三种解决方案,我很好奇更有经验的 AKKA 开发人员会推荐哪一种。我自己的直觉是解决方案 1 是首选,请参阅下面的我自己的论点:

可能会有更多变化,例如在 ASP.NET 和 IoT 消费者应用程序中集成 AKKA.NET 逻辑,但我不喜欢让参与者 运行ning不同的应用程序,至少在我试图建立一个全新的基于参与者的实现的早期阶段。

以下是我对解决方案 1 的论点:

我的偏好始终是选项 1 之类的东西 - 将 actor 系统 运行 保持在内部 ASP.NET 非常薄,因此 Web 应用程序仍然主要是 "just" Web 应用程序。让您的真实演员 运行 在 Topshelf 服务中,该服务通过 Akka.Remote 从 ASP.NET 应用程序接收输入。

我已经在生产中大规模使用此设置,并在移动分析和营销自动化 SaaS 应用程序中取得了巨大成功:http://www.aaronstannard.com/markedup-akkadotnet/

我为什么喜欢这个?我可以将更改彼此独立地部署到任一服务,并且我可以定制我的 Topshelf 服务来处理诸如 Chron 作业之类的事情,而无需将其耦合到 ASP.NET 部署。这是松散耦合事物的好方法。