精华内容
下载资源
问答
  • Akka.NET训练营 欢迎来到! 这是的人们为您提供的免费的,自我指导的学习课程。 在本训练营的三个单元中,您将学习如何使用Akka.NET actor和核心Akka.NET框架的许多其他部分来创建功能齐全的真实程序! 我们将从...
  • Akkatecture是用于dotnet核心的cqrs和事件源框架,建立在akka.net之上。 围绕使用akka的高度可伸缩的消息传递和事件流发布子机制进行了全面优化。 Akkatecture目标为netstandard2.0 。 继续阅读,了解,并阅读。 ...
  • AkkaWPF 尝试将Akka.NET模式与模块化WPF和MVVM结合使用
  • Akka.net分布式数据传输,可利用在socket分布式部署,服务器之间信息通信的转发
  • 一个基本的核心代码集,用于使用Akka.Net和Event Store支持事件源和CQRS。 大致基于克里斯·马丁(trbngr)所做的工作。 查看有关Akka.Net的更多信息 查看有关事件存储的更多信息 这利用了Akka.Net EventStore。
  • 帝国帝国 《帝国时代II》游戏规则使用Akka.NET Actor模型实现 工作正在进行中 尝试的想法 将FSharp用于域 使用xUnit进行测试 使用Specflow进行验收测试 使用Akka保存整个状态
  • 推阿卡 使用 Akka.NET 实现可扩展的推送通知后端服务 建筑学
  • 探索Akka点网 有五个不同的解决方案文件夹与此仓库关联 无类型演员 打字演员 ReceiveActor 行为举止 远程处理 我建议按此顺序阅读代码
  • 这是一个非常基本的示例应用程序,它使用Akka.Net和Event Store实现事件源。 查看有关Akka.Net的更多信息 查看有关事件存储的更多信息 这利用了Akka.Net EventStore。 正在写,内容涵盖了主要的兴趣点。
  • Akka.NET Akka.NET是流行的Java / Scala框架分布式actor框架到.NET的专业级端口。 Akka.NET是一个项目。 建立状态 阶段 状态 建立 NuGet包 .NET Framework单元测试 .NET Framework多节点测试 .NET Core...
  • 忠诚-akka.net 使用 Akka.NET,实现一个简单的忠诚度计划。
  • Petabridge相信应该有一种低成本的替代方案,以使学生,初创企业,DIY开发人员以及任何不想为该许可证付费的人都可以访问Akka.NET。 这就是Akka.Monitoring的本质-一种免费,开源的简单,直接的替代方案。 我们将...
  • Akka.net分布式实例

    2016-10-28 14:32:35
    Akka.net分布式实例
  • Online game server on Akka.NET , 如果是 C#游戏服务器可以参考这个ppt的介绍
  • Akka.NET 技术和原理: - 使用写入事件的 Akka.NET 参与者使用与使用读取事件的参与者截然不同的接口 - 一个模块,允许 Akka.NET 开发人员创建 Akka.NET 参与者的水平可扩展、对等、容错和弹性网络。 - 一个容错的...
  • Akka.NET Dragons演示(又名该项目)是一个演示项目,用于展示Akka.NET概念,专门为开发人员,开发人员,开发人员(DDD)会议编写。 技术与框架 该项目是在Visual Studio 2015上开发的,并在以下核心技术和框架(按...
  • Akka.net 和 Orleans对比

    2019-08-07 15:33:32
    AKKA.net 区分本地和远程 Actor,Orleans基本上透明的,并不知道Actor在哪里。

     

    AKKA.net  区分本地和远程 Actor,Orleans基本上透明的,并不知道Actor在哪里。

     

    展开全文
  • Akka.NET 是 Akka 的 .NET 开源实现。用于构建强大的并发和分布式应用。Akka 是一个用 Scala 编写的库,用于简化编写容错的、高可伸缩性的 Java 和 Scala 的 Actor 模型应用。示例代码:using System; using ...
  • Akka.NET 是 Akka 的 .NET 开源实现。Akka 是一个用 Scala 编写的库,用于简化编写容错的、高可伸缩性的 Java 和 Scala 的 Actor 模型应用。 文章转载自 开源中国社区 [http://www.oschina.net] ...

    Akka.NET 是 Akka 的 .NET 开源实现。Akka 是一个用 Scala 编写的库,用于简化编写容错的、高可伸缩性的 Java 和 Scala 的 Actor 模型应用。

    screenshot

    文章转载自 开源中国社区 [http://www.oschina.net]

    展开全文
  • Akka.NET: 交易和帐户是由后台.net核心工作人员服务随机生成的。 每个帐户的交易(借方/贷方)将由Akka.NET Actor处理。 这些交易通过SignalR发送给客户。 在客户端浏览器中,并发事件通过Bacon.js接收并排队...
  • Akka 来构建具备高容错性、可以横向扩展的分布式网络应用程序。 Akka 通常是指一个强大的分布式工具集,用于协调远程计算资源来进行一些工作 Akka 工具集以及Actor 模型的介绍。 Actor 与并发:响应式编程。...

    Akka 来构建具备高容错性、可以横向扩展的分布式网络应用程序。

    Akka 通常是指一个强大的分布式工具集,用于协调远程计算资源来进行一些工作

    • Akka 工具集以及Actor 模型的介绍。
    • Actor 与并发:响应式编程。Actor 与Future 的使用。
    • 传递消息:消息传递模式。 第4 章 Actor 的生命周期—处理状态与错误:Actor 生命周期、监督机制、Stash/ Unstash、Become/Unbecome 以及有限自动机。
    • 纵向扩展:并发编程、Router Group/Pool、Dispatcher、阻塞I/O 的处理以 及API。
    • 横向扩展—集群化:集群、CAP 理论以及Akka Cluster。
    • 处理邮箱问题:加大邮箱负载、不同邮箱的选择、熔断机制。

     

    Actor 模型是一种并发计算的理论模型,而Akka 的核心其实是Actor 并发模型的一种现代化实现

      什么是Actor 首先,让我们来定义什么是Actor。在Actor 模型中,Actor 是一个并发原语;更简单 地说,可以把一个Actor 看作是一个工人,就像能够工作或是处理任务的进程和线程一样。 把Actor 看成是某个机构中拥有特定职位及职责的员工可能会对理解有所帮助。比如说一 个寿司餐馆。餐馆的职员需要做各种各样不同的工作,给客人准备餐盘就是其中之一。

      Actor 每次只同步处理一个消息。邮箱本质上是等待Actor 处理的一个工作队列,如 图1-1 所示。处理一个消息时,为了能够做出响应,Actor 可以修改内部状态,创建更多 Actor 或是将消息发送给其他Actor。

     在具体实现中,我们通常使用Actor 系统这个术语来表示多个Actor 的集合以及所 有与该Actor 集合相关的东西,包括地址、邮箱以及配置。 下面再重申一下这几个重要的概念:

    • Actor:一个表示工作节点的并发原语,同步处理接收到的消息。Actor 可以保存 并修改内部状态。
    • 消息:用于跨进程(比如多个Actor 之间)通信的数据。
    • 消息传递:一种软件开发范式,通过传递消息来触发各种行为,而不是直接 触发行为。
    • 邮箱地址:消息传递的目标地址,当Actor 空闲时会从该地址获取消息进行处理。
    • 邮箱:在Actor 处理消息前具体存储消息的地方。可以将其看作是一个消息队列。
    • Actor 系统:多个Actor 的集合以及这些Actor 的邮箱地址、邮箱和配置等。

     

      我们可以举一个现实世界中的例子来比喻使用Actor 模型来建模的 过程,这会帮助我们理解它带来的好处。比如有一个寿司餐馆,其中有3 个Actor:客人、 服务员以及厨师。 首先,客人向服务员点单。服务员将客人点的菜品写在一张纸条上,然后将这张纸 条放在厨师的邮箱中(将纸条贴在厨房的窗户上)。当厨师有空闲的时候,就会获取这条 消息(客人点的菜品),然后就开始制作寿司(处理消息),直至寿司制作完成。寿司准 备好以后,厨师会发送一条消息(盛放寿司的盘子)到服务员的邮箱(厨房的窗户),等 待服务员来获取这条消息。此时厨师可以去处理其他客人的订单。 当服务员有空闲时,就可以从厨房的窗户获取食物的消息(盛放寿司的盘子),然后 将其送到客人的邮箱(比如餐桌)。当客人准备好的时候,他们就会处理消息(吃寿司), 如图1-2 所示。 运用餐厅的运作来理解Actor 模型是很容易的。随着越来越多的客人来到餐厅,我们 可以想象服务员每次接收一位客人的下单,并将订单交给厨房,接着厨师处理订单制作寿 司,最后服务员将寿司交给客人。每个任务都可以并发进行。这就是Actor 模型提供的最 大好处之一:当每个人各司其职时,使用Actor 模型分析并发事件非常容易。而使用Actor 模型对真实应用程序的建模过程和本例中对寿司餐厅的建模过程并没有太大差异。

    转载于:https://www.cnblogs.com/gougou1981/p/10319052.html

    展开全文
  • Akka.FluentConfig 对 Akka.NET 的流畅配置支持 这个 API 以前是 Akka.NET 的一部分,但是现在被认为已经过时了。 此存储库仅用于帮助人们从 fluent 配置 api 迁移到标准的应用程序/网络配置支持。
  • Akka.Persistence.EventStore 用于事件存储的Akka.Net持久性扩展/插件 查看有关Akka.Net的更多信息 查看有关事件存储的更多信息 注意:这不支持Akka Persistence的事件删除选项
  • Akka-Testing:Akka.NET测试基础
  • 阿卡聊天 简单的 Akka.Net 聊天程序
  • 人造银行 用于学习如何使 Akka.Net Actors 适应聚合的测试项目
  • akka.net-dev.zip

    2021-04-29 11:28:06
    actor模型的.net实现akka
  • 使用 Akka.NET 创建 REST api 服务的概念证明 使用 创建简单的api“控制器”: public class HelloApi : BaseApi { public HelloApi () { Get ( req => " Hello from Akka " ); } } 在api actor 中初始化...
  • 走进 Akka.NET

    2018-12-20 16:21:00
    ... 一、Akka.NET 是什么? Akka 是一个构建高并发、分布式和弹性消息驱动的工具包。Akka.NET 是 Akka 的一个 .NET 的移植库。...Akka.NET 内部都是 Actor 构成的,Actor 是一个状态、行为、邮箱、子节点和监视者...

    官方文档:https://getakka.net/index.html

    官网:https://petabridge.com/

     

    一、Akka.NET 是什么?

    Akka 是一个构建高并发、分布式和弹性消息驱动的工具包。Akka.NET 是 Akka 的一个 .NET 的移植库。

    Akka.NET 内部都是 Actor 构成的,Actor 是一个状态、行为、邮箱、子节点和监视者策略构成的容器。

     

    二、Akka.NET 的一些基础模块

    Akka - 核心 Actor 库
    Akka.Remote - 跨节点 Actor 部署/通信
    Akka.Cluster - 弹性 Actor 网络(HA)
    Akka.Persistence - 事件源, 持久化 Actor 状态 & 恢复
    Akka.Streams - 流式工作流
    Akka.Cluster.Tools - 集群单例, 分布式发布/订阅
    Akka.Cluster.Sharding - 持久化状态分区
    Akka.DData - 最终一直的数据复制

     

    三、Akka.NET 的架构

     

    如图所示,一个 akka 系统有一个跟节点 root,然后 root 有2个子节点,user 和 system ,你定义的 actor 都在 user 下,system 下都是系统定义的

     

    四、Akka.NET 发送消息的规则

    • 最多一次交付

    • 每个配对的发送者、接收者对消息保持排序。

     

    五、基础 Actor 类型

    • ReceiverActor:如果使用这个类型的 Actor 为基类,使用 Receive<T>(msg=>{}); 来接收消息
    • UntypedActor:如果使用这个类型的 Actor 为基类,需要重写 OnReceive(object message) 方法,然后区分 message 类型

     

    六、使用 Akka.NET

    • 普通模式

    因为 Helloworld 的例子太多了,官网也有,这里直接略过。

    代码在这里  

    代码里有些特殊情况的处理没写,这里简单说一下

    比如 sender 发送给了 receiver 一个消息,但是 receiver 还有些事情没有准备好,比如发送来一个消息,但是可能需要先登录,那就先缓存下来,等办完事再处理

    流程是:先 Stash 消息,开启 Scheduler ,发送 GetToken 消息,token 获取成功返回 GetTokenSuccess 消息,取消 Scheduler ,变成 Redy 状态,正常处理消息

    public ReceiveActor()
    {
            private ICancelable _cancel;
    
            public ReceiveActor()
            {
                Receive<TestMsg>(msg =>
                {
                    Stash.Stash();
                });
    
                Receive<GetToken>(msg =>
                {
                    GetTokenProcess();
                }
    
                Receive<GetTokenSuccess>(msg =>
                {
                    _cancel?.Cancel();
                    _cancel = null;
    
                    Become(Ready);
                });
    
                if (_cancel == null)
                {
                    _cancel = Context.System.Scheduler.ScheduleTellRepeatedlyCancelable(TimeSpan.Zero, TimeSpan.FromSeconds(10), Self, new GetToken(), Self);
                }
            }
    
            private void Ready()
            {
                Receive<TestMsg>(msg =>
                {
                    //Todo
                });
    
                Stash.UnstashAll();
            }
    
            private void GetTokenProcess()
            {
                var tokenActor = Context.ActorOf(Props.Create(() => new TokenActor("url")));
                tokenActor.Ask<GetTokenSuccess>(new GetToken
                {
                    Token = "",
                }).ContinueWith(tr =>
                {
                    if (tr.IsCanceled || tr.IsFaulted)
                    {
                        return new GetTokenSuccess();
                    }
    
                    return tr.Result;
                }).PipeTo(Self);
            }
    
            public class GetToken
            {
                public string Token { get; set; }
            }
    }

     

     

    • Router

    Actor 内部其实是单线程的处理消息的,但是用了 Router 可以把消息分出去给多个节点处理,这里分为2种模式,group 和 pool

    先来看 group 配置

    akka {
       actor{
          provider = cluster
          deployment {
            /api/myClusterGroupRouter {
              router = broadcast-group # routing strategy
              routees.paths = ["/user/api"] # path of routee on each node
              nr-of-instances = 3 # max number of total routees
              cluster {
                 enabled = on
                 allow-local-routees = on
                 use-role = crawler
              }
            }
          }
       }
    }

     

     如图看到在 89节点上注册了 90 和 91 节点的 Routees

     

    pool 模式

    akka {
       actor{
          provider = cluster
          deployment {
            /api/myClusterPoolRouter {
              router = round-robin-pool # routing strategy
              nr-of-instances = 10 # max number of total routees
              cluster {
                 enabled = on
                 allow-local-routees = on
                 use-role = crawler
                 max-nr-of-instances-per-node = 1
              }
            }
          }
       }
    }

    这种模式其实是在 90 和 91 的节点上分别注册了 89 的 routee,89上是akka.tcp://Sys@localhost:90/remote/akka/tcp/localhost:89/$a 和 akka.tcp://Sys@localhost:91/remote/akka/tcp/localhost:89/$a

     具体代码在这里 

    • Shard

    用逻辑 id 联系,不关心集群中的物理位置或管理他们的创建,可以 rebalance (消耗资源比较大,只有差异比较大的时候才会,默认 rebalance-threshold = 10,shard 数量设置为集群节点最大数量的10倍,shard 数量太大消耗大)

    整个 ActorSystem 中只能有一个Codinator,在最老的节点上,因为最老的节点被认为是安全的。

    如图所示整个系统分为了 Coordinator ,Shard region(typeName), Shard,Entity 部分,节点的路径是  /user/sharding/<typeName>/<shardId>/<entityId> 和普通的路径 /user/<actorName> 不一样

    这里使用了 Persistent ,每种数据库的配置完全不同,我是 Redis 的配置,建议使用即时更新的数据库,不更新的很可能是弃用的,比如 mysql。

    具体代码在这里

    这里需要注意的是:

    1. 只能有一个 Lighthourse —— 否在爆 ID 13 error
    2. 创建 ActorSystem 的时候后边加上 _config.WithFallback(ClusterClientReceptionist.DefaultConfig()).WithFallback(DistributedPubSub.DefaultConfig()); —— 否在爆 ID 9 error
    • 区别

    Shard 看着好像也能处理 Router 的问题,但这里又有些区别,此处摘自官方文档,用的自动翻译,请自行理解下:

    在一致的散列场景中,整个密钥空间被拼接在我们在路由器配置中定义的参与者数量之间。这究竟意味着什么?单个参与者实例负责处理整个范围的密钥。例如:假设在一个一致的哈希路由器后面,我们有一个数字1-100的密钥空间,在5个参与者之间平均共享。这意味着,第一个参与者将负责处理ID为1-20、第二个参与者21-40、第三个参与者41-60等的所有消息。如果您的目标是每个标识符有一个唯一的参与者,那么对于您的情况来说,这不是一个有效的场景。在集群分片场景的另一边,每个实体(这就是我们如何引用分片参与者)由对(ShardId,EntityId)标识。它是1-1关系,因此用同一对标识的消息保证总是路由到相同的单个实体。 另一个区别是灵活性。一致的哈希路由器几乎是静态的,在您想要调整集群大小的情况下,它们不能很好地工作。你记得以前提到过的拼接键空间的概念吗?想象一下,一旦我们改变分配给它的参与者/节点的实际数量,它将如何工作。当然,这些关键范围也必须改变。因此,在集群大小调整之后,以前处理ID为1-20的消息的演员现在可以处理不同的范围(即,1-15)。这称为“分区切换”。当使用集群切分时,我们的参与者将能够随着集群大小的改变迁移到其他节点,即使在集群大小改变时,也能够保持消息id和分割实体之间的关系。

     

    七、总结

    除了 stream 没研究,其他的多少都看了一点,因为我没有使用 stream 的场景,其他发现 Helloworld 的入门真的没什么用,只是让你理解 Actor 的开发的思想和模式,实际使用需要多看文档,一点点研究,还有就是官网的博文,再就是一些大神写的例子,

    这里放几个网址供大家学习

    GitHub:

    https://github.com/cgstevens/FileProcessor

    https://github.com/Horusiath/AkkaDemos

    https://github.com/petabridge/akkadotnet-code-samples

    https://github.com/Lutando/Akkatecture

     

    文档:

    Streams:https://petabridge.com/blog/akkadotnet-11-cluster-streams/

    Distributed Pub-Sub:https://petabridge.com/blog/distributed-pub-sub-intro-akkadotnet/

    Shard:https://petabridge.com/blog/introduction-to-cluster-sharding-akkadotnet/

    Shard:https://petabridge.com/blog/cluster-sharding-technical-overview-akkadotnet/

    Petabridge.Cmd:https://petabridge.com/blog/petabridgecmd-release/

    Moonitoring:https://github.com/petabridge/akka-monitoring

    你是不是感觉很奇怪,没有 Dashboard 呢,其实是有,但是收费,在这里:https://phobos.petabridge.com/

     

    转载于:https://www.cnblogs.com/heyixiaoran/p/9935563.html

    展开全文
  • AkkaCqrs 尝试通过Akka.net实施CQRS ##请不要将其用于任何实际项目!

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,835
精华内容 1,534
热门标签
关键字:

Akka.NET