AKKA.NET 与 Asp.net 网络 api

AKKA.NET with Asp.net web api

我们计划使用 AKKA.NET 开发审计服务网络 api。

API 将接收审核日志数据并生成一个 Audit actor,后者将进行一些安全检查,将数据插入数据库并发送一个在发生任何重大安全漏洞时发送电子邮件通知。计划是使用 TELL 方法在即发即弃机制中进行处理。 API 将始终 return 200 OK,以便调用服务不受影响。

当我们做一些研究时,我们发现大多数帖子建议在 global.asax 中创建 ActorSystem 的静态实例,我们找到了 2 种创建 actor 的方法

  1. 在 API 和 中生成一个 actor [具有唯一名称] 并为每次调用启动一个新的 Actor 实例并调用 Tell 方法
  2. 创建一个 Actor 的单个静态实例 并调用 Tell 方法

我们认为方法 2 是利用 AKKA.NET 的最佳方式。我们走在正确的道路上吗?

在这种情况下,我通常会选择选项 1。您需要考虑如何处理失败。每次你收到命令时,我可能会创建某种主管演员来处理这个过程。然后主管可以创建和监督(即确定如何处理故障)两个参与者 - 一个用于保存到数据库,另一个用于发送电子邮件。主管将负责管理进程并在完成时自行终止(和 children)。

如果您选择第二个选项,您将拥有一个用于所有消息的队列,因此您将 运行 遇到扩展问题。你可以通过拥有一个 Actors 池来解决这个问题,但我认为处理重试和失败会更加困难,特别是如果你需要知道哪些东西已经保存但没有发送电子邮件。你可能仍然可以让它工作,特别是如果你不关心 save-then-email 过程是否完全完成,但我只是认为第一个选项更适合 Actor 模型。