我有一个典型的Web应用程序,使用Entity框架与数据库进行交互。这是应用程序的细分。
现在我想在这个应用程序中使用Akka.NET。我创建了一个Engine类,它封装了Akka System actor并创建了一个日志记录actor(Demo.Core)。我认为引擎是一个具有send函数的类,可以在系统范围内使用,而且函数决定哪个actor最适合处理消息。
但是,我无法决定如何根据akka管理数据上下文和实体类。
如果我在IIS上运行两个Demo.Web实例,在WebDev上运行一个实例 他们会有2个独立的演员系统或单个演员系统吗? (他们都使用相同的代码库)?
我是Akka.NET的新手,所以在回答时请不要假设
答案 0 :(得分:3)
因此,大多数问题的答案往往是“它取决于”,它在很大程度上取决于您的架构和应用程序要求,但我会尝试在此处分解。
1)这取决于您检索实体的频率。由于参与者一次处理一个消息,如果每个实体有大量请求,那么如果消息队列太长,您可能会遇到长时间检索数据的请求。由于Akka.Net是一个用于构建并发应用程序的工具,因此通常将工作分解为最小的工作单元,这样您就可以轻松地分配工作。
2)这取决于您的应用程序是否受读取或写入限制,以及您是否对读取和写入顺序有强烈要求。消息是按顺序处理的,因此如果有大量写入通过负责读取和写入的actor进入数据库,则读取可能需要一些时间才能处理。类似地,如果您有一些硬限制,某个读取必须在给定的写入之前发生,那么您将希望读取和写入存在于同一队列中。
3)参与者通过URI进行寻址,因此可以通过众所周知的URI和ActorSystem实例上的ActorSelection来检索它们。通常不需要创建自定义函数来发送给actor。而是创建公共函数以基于URI部分检索actor URI。
4)是的actor可以存在于多个程序集中,您只需要确保它们从其中一个actor类型继承,通常是ReceiveActor或UntypedActor。
5)他们有2个独立的演员系统,但可以通过Akka.Remote或Akka.Cluster加入。 Actor系统通常是长时间运行的进程,因此经常在专用于运行actor系统的服务器和运行Web服务器的前端节点上运行,只需加入系统并将消息推入其中或从中提取数据。