C# 带有Asp.NET web api的AKKA.NET

C# 带有Asp.NET web api的AKKA.NET,c#,asp.net,rest,asp.net-web-api,akka.net,C#,Asp.net,Rest,Asp.net Web Api,Akka.net,我们计划使用AKKA.NET开发审计服务web api API将接收审核日志数据,并生成一个审核参与者,该参与者将执行一些安全检查,将数据插入数据库,并在出现任何重大安全漏洞时发送电子邮件通知。计划是使用TELL方法在fire and forget机制中进行处理。API将始终返回200OK,以便调用服务不受影响 当我们做一些研究时,我们发现大多数帖子都建议在global.asax中创建一个ActorSystem的静态实例,我们发现了两种方法来确定一个演员 在API内部生成一个actor[具有唯一

我们计划使用AKKA.NET开发审计服务web api

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

当我们做一些研究时,我们发现大多数帖子都建议在global.asax中创建一个ActorSystem的静态实例,我们发现了两种方法来确定一个演员

  • 在API内部生成一个actor[具有唯一名称],并为每次调用启动一个actor的新实例,并调用Tell方法
  • 创建参与者的单个静态实例并调用Tell方法

  • 我们认为方法2是利用AKKA.NET的最佳方式。我们走对了吗?

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


    如果选择第二个选项,则所有消息都将有一个队列,因此在缩放方面会遇到问题。你可以通过拥有一批参与者来解决这个问题,但我认为处理重试和失败会更加困难,特别是当你需要知道哪些东西已经保存但没有发送电子邮件时。您可能仍然可以让它工作,特别是如果您不关心保存然后发送电子邮件的过程是否完全完成,但我只是认为第一个选项更适合参与者模型。

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


    如果选择第二个选项,则所有消息都将有一个队列,因此在缩放方面会遇到问题。你可以通过拥有一批参与者来解决这个问题,但我认为处理重试和失败会更加困难,特别是当你需要知道哪些东西已经保存但没有发送电子邮件时。您可能仍然可以让它工作,特别是如果您不关心“保存然后发送电子邮件”过程是否完全完成,但我只是认为第一个选项更适合参与者模型。

    参与者是否有状态?没有问题没有状态它只会插入数据并发送电子邮件参与者是否有状态?没有问题没有状态它只会插入数据并发送电子邮件将为每个api调用创建3个参与者下一个开销。。。另外,我可能需要在流程完成后杀死这些参与者。。我有点困惑……在这种情况下,我们如何利用AKKA。另外,在DACTOR上创建数据包非常便宜,所以除非你有非常高的流量,否则我不会担心这个问题。但是,与任何性能问题一样,您应该测量和监视终止参与者的情况,您可以在流程完成时调用Stop()。非常感谢tom…没问题-如果你高兴,请接受答案。将为每个api调用创建3个参与者,然后增加开销。。。另外,我可能需要在流程完成后杀死这些参与者。。我有点困惑……在这种情况下,我们如何利用AKKA。另外,在DACTOR上创建数据包非常便宜,所以除非你有非常高的流量,否则我不会担心这个问题。但是,与任何性能问题一样,您应该测量和监视终止参与者的情况,您可以在流程完成时调用Stop()。非常感谢汤姆…没问题-如果你高兴,请接受答案