AKKA.NET与Asp.net网络API api

问题描述:

我们计划开发一个使用AKKA.NET的审计服务网络api。AKKA.NET与Asp.net网络API api

的API将收到的审计日志数据和将产生的审计演员将做一些安全检查,在一个数据库中插入数据,并且在任何重大安全隐患的情况下发送电子邮件通知。计划是使用TELL方法在火灾和遗忘机制中进行处理。该API将始终返回200 OK,以便呼叫服务不受影响。

当我们做了一些研究,我们发现大部分帖子的建议在Global.asax中创建的静态实例ActorSystem,我们发现creaing演员

  1. 菌种演员[用2种方式唯一的名称],该API内启动演员的新实例为每个呼叫和呼叫tell方法
  2. 创建演员的单一静态实例,并调用告诉法

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

+0

演员是否有状态? – tomliversidge

+0

没有问题没有状态它只会插入数据并发送电子邮件 – sam1977

我通常会选择这种情况下的选项1。你需要考虑如何处理失败。我可能会创建某种主管角色来处理这个过程,每次你得到一个命令来做到这一点。然后,主管可以创建和监督(即确定如何处理失败)两个参与者 - 一个用于保存到数据库,另一个用于发送电子邮件。主管负责管理流程并在完成后自行杀死(和子女)。

如果您选择第二个选项,您将为所有消息设置一个队列,这样您将遇到缩放问题。你可以通过设置一个Actor池来解决这个问题,但是我认为处理重试和失败会更困难,尤其是如果你需要知道哪些事情已经保存但没有发送邮件。你可能仍然可以使它工作,特别是如果你不在乎save-then-email过程是否完全完成,但我认为第一个选项更适合Actor模型。

+0

将为每个api调用下一个开销创建3个actor ...另外,我可能需要杀死这些演员后,过程完成..我qmlittle confused ..在这种情况下,我们如何利用AKKA。网..也是在d – sam1977

+0

演员很便宜创建,除非你有很高的流量,我不会担心这一点。但是,与任何性能问题一样,您应该测量并监视 – tomliversidge

+0

关于杀死Actor的方面,您可以在过程完成时调用Stop()。见https://petabridge.com/blog/how-to-stop-an-actor-akkadotnet/ – tomliversidge