【问题标题】:Using Akka.NET in a typical MVC application. How?在典型的 MVC 应用程序中使用 Akka.NET。如何?
【发布时间】:2015-08-20 21:38:45
【问题描述】:

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

  1. Demo.Core [包含日志记录(nlog 内容)、助手类、系统 宽常量等]
  2. Demo.Entities [包含 Entity 框架实体或 edmx 文件 only - 没有上下文]
  3. Demo.Business [ 包含数据管理器、EF 上下文、业务 使用 NRules、验证和其他东西的规则]
  4. Demo.Web [包含作为前端的 MVC 应用]

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

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

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

    我是 Akka.NET 的新手,所以在回答时请不要假设任何事情

【问题讨论】:

  • 这里是新手。我这样做的方式(目前正在这样做)是为 dbWrite、dbRead、Webserver、记录器、缓存和其他服务设置单独的参与者。您可以在不同的上下文中使用它们,但请确保将它们的 actorSelections 传递给相互通信的 actor。否则,您会以某种方式“失去”解决透明度的问题。我边走边学。前一年我尝试过 erlang,所以我有点“明白”这个演员的想法。只需要了解内部机制。我建议你从 erlang book 开始
  • 那么在 Akka.NET 世界中没有数据管理器的概念吗? IO 意味着通常我有不同的实体。要获得任何实体,我必须为每个实体创建一个演员?大约有 25 个实体……!这确实是一种不同的编程方式。

标签: c# model-view-controller architecture akka.net


【解决方案1】:

因此,大多数问题的答案往往是“视情况而定”,这在很大程度上取决于您的架构和应用程序要求,但我会在这里尝试对其进行分解。

1) 这取决于您检索实体的频率。由于参与者一次处理一个消息,如果每个实体有很多请求,那么如果消息队列太长,您最终可能会收到很长的请求来检索数据。由于 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 服务器的前端节点上运行,只需加入系统并将消息推送到其中或从中提取数据。

【讨论】:

  • 嗨@Bruinbrown,是否有任何使用Akka.net 构建的ASP.NET MVC 示例(关于爬虫的示例除外)?关于获取数据和保存数据的示例......也许是“博客示例”?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多