使用Akka.. NET在典型的MVC应用程序中.如何去做

本文关键字:应用程序 何去做 MVC 典型的 Akka NET 使用 | 更新日期: 2023-09-27 18:08:12

我有一个典型的使用实体框架与数据库交互的web应用程序。以下是应用程序的细分。

  1. 演示。Core[包含日志记录(nlog的东西),助手类,系统
  2. 演示。Entities[包含Entity框架实体或edmx文件
  3. 演示。Business[包含数据管理器、EF上下文、业务
  4. 演示。Web[包含前端的MVC应用程序]

现在我想使用Akka。我创建了一个Engine类来封装Akka System参与者,并创建了一个日志参与者(Demo.Core)。我认为引擎是一个类,它有一个发送函数,可以在系统范围内使用,这个函数决定哪个参与者最适合处理消息。

但是,我无法决定如何在akka方面管理数据上下文和实体类。

    我应该有单独的演员检索每种类型的实体吗?或一个Actor检索所有实体?
  1. 我应该有不同的上下文不同的多个演员角色,例如DBReaderActor &DBWriterActor或单个actor有数据库的上下文吗?
  2. 是否可以有一个引擎,有一个单一的发送功能作为如上所述,每个类都应该调用适当的actor本身?
  3. 一个系统的参与者可以在多个程序集中吗?像演示。核心,Demo.Business吗?
  4. 如果我运行两个Demo实例。一个在IIS上,一个在WebDev上他们会有两个独立的参与者系统还是一个单独的参与者系统(它们都使用相同的代码库)?

    我是Akka的新手。所以请不要在回答

  5. 时做假设。

使用Akka.. NET在典型的MVC应用程序中.如何去做

所以这些问题的答案往往是"视情况而定",这在很大程度上取决于您的架构和应用程序需求,但我将在这里尝试分解它。

1)这取决于你检索实体的频率。由于actor一次处理一个消息,如果每个实体有很多请求,那么如果消息队列太长,最终可能需要很长的请求来检索数据。Akka。. Net是一个用于构建并发应用程序的工具,通常将工作拆分为最小的工作单元,因此您可以轻松地分发工作。

2)这取决于您的应用程序是否受读或写的约束,以及您是否对读和写的顺序有很强的要求。消息是按顺序处理的,所以如果有很多写操作通过一个同时负责读和写的参与者进入数据库,那么处理读操作可能需要一些时间。类似地,如果你有硬约束,某个读必须发生在一个给定的写之前,那么你会希望读和写存在于同一个队列中。

3) actor是由URI寻址的,因此可以通过已知的URI和在ActorSystem实例上使用ActorSelection来检索它们。通常不需要创建发送给参与者的自定义函数。相反,创建公共函数来基于URI部分检索参与者URI。

4)是的,actor可以存在于多个程序集中,你只需要确保它们继承自一个actor类型,通常是ReceiveActor或UntypedActor。

5)他们将有2个独立的参与者系统,但可以通过Akka加入他们。Remote或Akka.Cluster。Actor系统通常是长时间运行的进程,因此经常被留在专用于运行Actor系统的服务器和运行web服务器的前端节点上运行,只需加入系统并向其推送消息或从中提取数据。

相关文章: