欢迎来到神奇下载!我们唯一域名是:www.sqxzz.com

Akka Actor模型开发库 官方版 v2.6.14

更新时间:2022-06-11 10:09:30

软件介绍

Akka Actor提供分布式程序开发方案,用于为Java和Scala构建高度并发,分布式和弹消息驱动的应用程序,软件提供多个模块帮助您构建程序,可以在软件配置并发和分发方案,可以配置HTTP,可以配置集群,提供的模块还是非常多的,适合需要设计分布式工作方案的朋友使用,您可以在软件创建集群共享方案,提供了集群中参与者的分片功能,可以设置在集群中运行预设数量的参与者,支持起始实体设置,可以配置许通过其实体标识符启动特定的分片实体,您可以直接在软件创建新的实体,更轻松地构建功能强大的反应式,并发应用程序!

Akka Actor模型开发库软件功能

1、Akka Actor

Akka的核心是:一种并发和分发模型,而没有线程原语的所有痛苦。

2、Akka流

一种进行异步,无阻塞背压流处理的直观,安全的方法。

3、Akka HTTP

现代,快速,异步,流优先的HTTP和客户端。

4、Akka集群

通过将系统分布在多个节点上来实现弹和弹。

5、集群分片

根据角色的身份在集群中分布他们的角色。

6、分布式数据

最终是一致的,高度可读写的,低延迟的数据。

7、Akka持久

参与者的事件外包使他们在重新启动后可以达到相同的状态。

8、Akka投影

通过Akka Pjections,您可以处理从源到投影模型或外部系统的事件或记录流。

9、Akka管理

用于在云系统(k8,aws等)上运行Akka系统的扩展

10、Alpakka

Alpakka是基于Reactive Streams和Akka的Java和Scala的Reactive Enterpse Integration库。

11、Alpakka Kafka

Alpakka Kafka连接器-Alpakka是基于Reactive Streams和Akka的Java和Scala的Reactive Enterpse Integration库。

12、Akka gRPC

在Akka Streams上流式传输gRPC和客户端。

Akka Actor模型开发库软件特色

1、更简单的并发和分布式系统

Actor和流让你建立一个规模的系统了,使用资源的的更有效,并且出,使用多台。

2、设计具有弹

根据“反应式宣言 Akka”的原则,您可以编写在出现故障时能够自我修复并保持响应能力的系统。

3、高能

在一台计算机上的速度高达5000万msg / sec。内存占用少;每GB堆约250万个参与者。

4、弹和分散

分布式系统没有单点故障。跨节点的负载平衡和自适应路由。 带有聚类分片的事件源和CQRS。 使用CRDT实现最终一致的分布式数据。

5、反应流数据

具有反压的异步非阻塞流处理。完全异步和流式传输的HTTP和客户端为构建微服务提供了一个绝佳的平台。与Alpakka的流集成。

Akka Actor模型开发库教程

创建Actor

到目前为止,我们已经研究了Actor的定义及其消息。现在让我们更深入地了解位置透明的功能,并了解如何创建Actor实例。

位置透明的力量

在Akka中,您无法使用new关键字创建Actor的实例。而是使用工厂spawn方法创建Actor实例。Spawn不返回参与者实例,而是akka.actor.typed.ActorRef指向参与者实例的引用。这种间接级别在分布式系统中增加了很多功能和灵活。

在Akka中,位置无关紧要。位置透明意味着ActorRef容器在保留相同语义的同时,仍表示进程中正在运行的actor的实例或在远程计算机上。

如果需要,运行时可以通过在Actor运行时更改其位置或整个应用程序拓扑来优化系统。这将启用故障管理的“让它崩溃”模型,在该模型中,系统可以通过使有故障的Actor崩溃并重新启动健康的Actor来自我修复。

Akka Actor系统

AnActor是Akka的初始入口点。通常,Actor每个应用程序仅创建一个。AnActor有名字和监护人。应用程序的引导程序通常是在守护程序参与者中完成的。

这位的监护人Actor是GreeterMain。

val greeterMain: Actor[GreeterMain.SayHello] = Actor(GreeterMain(), "AkkaQuickStart")

它用于Behaviors.setup引导应用程序。

生成child actors

其他参与者是使用上的spawn方法创建的ActorContext。将GreeterMain创建一个Greeter演员在启动这种方式,以及新的GreeterBot每次接收时间SayHello消息。

异步通讯

参与者是反应的并且是消息驱动的。在收到消息之前,Actor不会做任何事情。Actor使用异步消息进行通信。这样可以确保发件人不会停留在等待收件人处理其消息的过程中。而是,发件人将邮件放在收件人的邮箱中,可以自由地进行其他工作。Actor的邮箱本质上是具有排序语义的消息队列。从同一Actor发送的多条消息的顺序得以保留,但可以与另一Actor发送的消息交错。

您可能想知道Actor在不处理消息(即进行实际工作)时正在做什么?它处于起状态,在此状态下,它不消耗内存以外的任何资源。再次,展示了Actor的轻量级,高效。

发送消息给Actor

要将消息放入Actor的邮箱,请使用上的!(bang)方法ActorRef。例如,Hello World的主类将消息发送给GreeterMainActor,如下所示:

我们已经研究了如何定义参与者的行为并发送消息。现在,让我们通过完整地查看Main课程来进行回顾。

主班

AkkaQuickstartHello World中的对象将创建Actor一个监护人。监护人是引导您的应用程序的顶级参与者。通常使用Behaviors.setup包含初始引导程序的守护程序进行定义。

完整的示例代码

看一下参与者行为,消息的定义以及如何启动Actor:

作为另一个最佳实践,我们应该提供一些测试范围。

测试Actor

Hello World示例中的测试说明了ScalaTest框架的用法。测试范围不完整。它只是说明测试参与者代码是多么容易,并提供了一些基本概念。您可以将其添加为练习来增加自己的知识。

测试类别定义

class AkkaQuickstartSpec extends ScalaTestWithActorTestKit with AnyWordSpecLike {

通过扩展包含对ScalaTest的支持ScalaTestWithActorTestKit。对于其他测试框架,可以直接使用testkit

这管理着ActorTestKit我们将在测试中使用的生命周期

测试方法

此测试使用TestPbe询问并验证预期的行为。让我们看一下源代码片段:

一旦获得对TestPbe的引用,我们会将其作为Greet消息的一部分传递给Greeter 。,我们验证Greeter响应是否已发生问候。

完整的测试代码

并且,这是完整的代码:

该示例代码只是从头开始介绍了中提供的功能ActorTestKit。

Akka Actor模型开发库集群共享

此扩展提供了集群中参与者的分片功能。典型的用例是,当您有许多有状态的参与者在一起使用的资源(例如,内存)多于一台计算机所容纳的资源。您需要将它们分布在群集中的多个节点上,并且希望能够使用它们的逻辑标识符与它们进行交互,而不必关心它们在群集中的物理位置,该位置也可能随时间而变化。例如,它可以是代表领域驱动设计术语中的聚合根的参与者。在这里,我们称这些参与者为“实体”。这些角色通常具有持久(持久)状态,但是此功能并不限于具有持久状态的角色。

在这种情况下,分片意味着具有标识符(称为实体)的参与者可以自动分布在集群中的多个节点上。每个实体参与者仅在一个地方运行,并且可以将消息发送到实体,而无需发送方知道目标参与者的位置。这是ShardRegion通过此扩展提供的参与者发送消息来实现的,该参与者知道如何将带有实体ID的消息路由到最终目的地。

应该首先使用此扩展,通常是在集群中每个节点上的系统启动时,使用ClusterSharding#init 方法注册受支持的实体类型,该方法返回ShardRegion命名实体类型的参与者引用。到实体的消息总是通过该实体ActorRef(即本地)发送的ShardRegion。消息也可以通过使用ClusterSharding#entityRefFor检索的EntityRef发送,该消息也将通过local发送。ShardRegion

可以按的akka.cluster.sharding 部分中所述配置某些设置reference.conf。

该ShardRegion演员在集群中开始的每个节点上,或节点的组标有特定的角色。在ShardRegion与创建ShardingMessageExtractor 来提取实体标识符和从传入消息碎片标识符。分片是将一起管理的一组实体。对于特定ShardRegion分片中的第一条消息,它向协调器akka.cluster.sharding.ShardCoordinator请求分片的位置。该ShardCoordinator决定其ShardRegion 拥有的碎片。该ShardRegion接收碎片的决定的家,如果是这样的ShardRegion实例本身会为实体它创建表示实体本地儿童演员和指挥的所有消息。如果碎片家是另一个ShardRegion实例消息将被转发到该ShardRegion实例。在解析分片的位置时,对该分片的传入消息进行缓冲,在知道分片位置时将其传递。后续到已解析分片的消息可以立即传递到目标目的地,而无需使用ShardCoordinator。

为了确保最多一个特定实体参与者的实例正在集群中的某处运行,重要的是所有节点对碎片的位置具有相同的看法。因此,分片分配决定由ShardCoordinator作为集群单例运行的Central决定 ,即在所有集群节点中最老的一个成员或标记有特定角色的一组节点中的一个实例。最早的成员可以通过akka.cluster.Member#isOlderThan确定。

为了能够使用集群中新添加的成员,协调器可促进分片的重新平衡,即将实体从一个节点迁移到另一个节点。在重新平衡过程中,协调器首先所有ShardRegion参与者分片的切换已开始。这意味着它们将开始缓冲该分片的传入消息,就像分片位置未知一样。在重新平衡过程中,协调器将不响应任何要重新平衡的分片位置的请求,即本地缓冲将继续进行,直到切换完成为止。ShardRegion负责重新平衡分片的负责人将通过将handOffMessage它们发送给它们来停止该分片中的所有实体。当所有实体均终止时,ShardRegion拥有实体将向协调员确认移交已完成。此后,协调器将答复对分片位置的请求,从而为分片分配新的位置,将ShardRegion参与者中的缓冲消息 传递到新位置。这意味着实体的状态不会被传输或迁移。如果实体的状态很重要,则它应该是持久的(耐用的),例如使用akka-persistence,以便可以在新位置恢复它。

可插拔分片分配策略中定义了决定重新分片的逻辑。默认实现akka.cluster.sharding.ShardCoordinator.LeastShardAllocationStrategy 从ShardRegion数量最多的先前分配的分片中选择分片进行切换。将它们分配给ShardRegion最少数量的先前分配的分片,即集群中的新成员。有一个可配置的阈值,以区别必须多大才能开始重新平衡。此策略可以由特定于应用程序的实现方式代替。

中的分片位置状态ShardCoordinator与故障一起存储akka-distbuted-data或 akka-persistence可以保留下来。从集群中删除(通过故障)崩溃或无法访问的协调器节点后,新的ShardCoordinator单例角色将接管并恢复状态。在这样的故障期间,具有已知位置的分片仍然可用,而用于新(未知)分片的消息将被缓冲,直到新的分片ShardCoordinator可用为止。

只要发件人使用相同的ShardRegion参与者将消息传递到实体参与者,消息的顺序就会保留下来。只要未达到缓冲区限制,便以与普通消息发送相同的方式,尽最大努力以最多一次的传递语义传递消息。通过使用AtLeastOnceDeliveryin,可以添加具有至少一次语义的可的端到端消息传递akka-persistence。

由于到协调器的往返路程,针对以新的或先前未使用的分片为目标的消息引入了一些额外的延迟。分片的重新平衡也可能会增加延迟。在设计应用程序特定的分片分辨率时,应考虑这一点,例如,避免粒度太细的分片。

该ShardRegion演员也可以在代理仅模式启动,也就是说,它不会举办任何实体本身,而是知道如何委派消息到正确的位置。

如果实体的状态是持久的,则可以停止不用于减少内存消耗的实体。这是通过实体参与者的特定于应用程序的实现来完成的,例如,通过定义接收超时(context.setReceiveTimeout)。如果邮件在自身停止时已经排队到实体,则该邮箱中的排队消息将被丢弃。为了在不丢失此类消息的情况下支持优雅的钝化,实体参与者可以发送ClusterSharding.Passivate到ActorRef[ShardCommand] 创建实体时传递给工厂方法的对象。.指定的stopMessage消息将发送回实体,应该停止自身。传入的消息将ShardRegion 在接收到的消息之间被缓冲Passivate实体的终止。此后,将这些缓冲的消息传递到实体的新化身。

此类仅用于测试目的(例如,存根实现),不能用于用户扩展。将来可能会添加更多方法,并且可能会此类实现。

近期热门

1
UEStudio增强版是 UltraEdit 的开发环境版本,软件功能非常强大,界面简洁明晰、作方便快捷,设计 […]
2
DLL函数查看器是一款易于使用的dll函数查看工具。软件具备了简单直观的用户界面,拖动dll文件到窗口,或者双 […]
3
精易csharp编程助手也就是精易c#编程助手,是一款辅助c#快速开发的工具,主要功能模块包括常用代码、网页提 […]
4
Alactty是一款跨平台的OpenGL终端仿真器,可以通过这款软件快速运行脚本,添加了对Windows的支持 […]
5
VSCodium(VScode二进制版本)免费下载是编程开发分类下一款电脑软件,神奇下载小编给各位带来了VSC […]
6
Dxpress版是一款优秀实用的控件库软件。Dxpress19中文版软件能够帮助用户设计具有图形和高级和高级功 […]
7
Kratos提供非常多的服务框架,可以帮助用户在搭建网站和应用的时候快速配置通讯,配置HTTP服务,配置数据分 […]
8
CDS是一款自动化软件,您可以在软件上建立多种自动化作业方式,有效提升企业工作效率,优化复杂的工作流程,您可以 […]
9
夜神助手全称是夜神模拟器连接助手,因为作者在安卓逆向学习过程中,经常使用夜神模拟器调试程序经常打开很多命令行窗 […]
10
MyBB是一款论坛开发软件,如果你需要设计论坛就可以直接通过这款软件部署到使用,不需要自己原创代码就可以立即创 […]

声明:本站所有软件和文章来自互联网 如有异议 请与本站联系 本站为非赢利性网站 不接受任何赞助 转载需标注!

Copyright © 2018-2023 All Rights Reserved. 神奇下载网站备案编号:苏ICP备12036411号

抵制不良游戏软件,拒绝盗版。 注意自我保护,谨防受骗上当。 适度娱乐益脑,沉迷伤身。合理安排时间,享受健康生活。

共 23 次查询,耗时 0.670 秒