Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在典型的MVC应用程序中使用Akka.NET。怎么用?_C#_Model View Controller_Architecture_Akka.net - Fatal编程技术网

C# 在典型的MVC应用程序中使用Akka.NET。怎么用?

C# 在典型的MVC应用程序中使用Akka.NET。怎么用?,c#,model-view-controller,architecture,akka.net,C#,Model View Controller,Architecture,Akka.net,我有一个使用实体框架与数据库交互的典型web应用程序。下面是该应用程序的详细信息 Demo.Core[包含日志记录(nlog内容)、助手类和系统 宽常数等] Demo.Entities[包含实体框架实体或edmx文件 仅限-无上下文] Demo.Business[包含数据管理器、EF上下文和业务 使用规则、验证等的规则] Demo.Web[包含作为前端的MVC应用程序] 现在我想在这个应用程序中使用Akka.NET。我创建了一个封装Akka系统参与者的引擎类,并创建了一个日志参与者(Demo.C

我有一个使用实体框架与数据库交互的典型web应用程序。下面是该应用程序的详细信息

  • Demo.Core[包含日志记录(nlog内容)、助手类和系统 宽常数等]
  • Demo.Entities[包含实体框架实体或edmx文件 仅限-无上下文]
  • Demo.Business[包含数据管理器、EF上下文和业务 使用规则、验证等的规则]
  • Demo.Web[包含作为前端的MVC应用程序]
  • 现在我想在这个应用程序中使用Akka.NET。我创建了一个封装Akka系统参与者的引擎类,并创建了一个日志参与者(Demo.Core)。我认为engine是一个类,它有一个发送函数,可以在系统范围内使用,该函数决定哪个参与者最适合处理消息

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

  • 我应该有单独的参与者来检索每种类型的实体吗?或 一个参与者用于检索所有实体
  • 我是否应该让多个演员在不同的场景中扮演不同的角色 角色,例如DBReaderActor和DBWriterActor或单个参与者 有数据库的上下文吗
  • 可以使用一个具有单一发送功能的引擎吗 上面提到的或每个类都应该调用适当的参与者 本身
  • 一个系统的参与者可以在多个程序集中吗?比如Demo.Core& 演示,生意
  • 如果我运行两个Demo.Web实例,一个在IIS上,另一个在WebDev上 他们会有两个单独的参与者系统还是一个单独的参与者系统 (它们都使用相同的代码库)

    我是Akka.NET的新手,所以在回答问题时请不要想当然


  • 因此,这些问题的大多数答案往往是“它取决于”,这在很大程度上取决于您的体系结构和应用程序需求,但我将尝试在这里对其进行细分

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

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

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

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


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

    这里是新手。我做这件事的方式(目前正在做)是为dbWrite、dbRead、Webserver、logger、cache和其他服务提供单独的参与者。您可以在不同的上下文中使用它们,但请确保将它们的actorSelections传递给相互通信的参与者。否则,你会不知何故“失去”地址透明度的东西。我边走边学。我在前一年尝试过erlang,所以我有点“理解”这个演员的想法。只需要了解内部机制。我建议您从erlang bookSo开始在Akka.NET世界中没有数据管理器的概念?我的意思是通常我有不同的实体。要获得任何实体,我必须为每个实体创建一个参与者?大概有25个实体。。。!这真的是一种不同的编程方式。您好@Bruinbrown,是否有使用Akka.NET构建的ASP.NET MVC示例(关于爬虫的示例除外)?有关获取数据和保存数据的示例。。。也许是“博客样本”?