分类分类
大小:15.0 MB 更新:2021/04/19
类别:编程工具系统:WinXP, Win7, Win8, Win10, WinAll
Akka
Actor提供分布式程序开发方案,用于为Java和Scala构建高度并发,分布式和弹性消息驱动的应用程序,软件提供多个模块帮助您构建程序,可以在软件配置并发和分发方案,可以配置HTTP,可以配置集群,提供的模块还是非常多的,适合需要设计分布式工作方案的朋友使用,您可以在软件创建集群共享方案,提供了集群中参与者的分片功能,可以设置在集群中运行预设数量的参与者,支持起始实体设置,可以配置许通过其实体标识符启动特定的分片实体,您可以直接在软件创建新的实体,更轻松地构建功能强大的反应式,并发应用程序,需要就下载吧!
1、Akka Actor
Akka的核心是:一种并发和分发模型,而没有线程原语的所有痛苦。
2、Akka流
一种进行异步,无阻塞背压流处理的直观,安全的方法。
3、Akka HTTP
现代,快速,异步,流优先的HTTP服务器和客户端。
4、Akka集群
通过将系统分布在多个节点上来实现弹性和弹性。
5、集群分片
根据角色的身份在集群中分布他们的角色。
6、分布式数据
最终是一致的,高度可读写的,低延迟的数据。
7、Akka持久性
参与者的事件外包使他们在重新启动后可以达到相同的状态。
8、Akka投影
通过Akka Projections,您可以处理从源到投影模型或外部系统的事件或记录流。
9、Akka管理
用于在云系统(k8,aws等)上运行Akka系统的扩展
10、Alpakka
Alpakka是基于Reactive Streams和Akka的Java和Scala的Reactive Enterprise Integration库。
11、Alpakka Kafka
Alpakka Kafka连接器-Alpakka是基于Reactive Streams和Akka的Java和Scala的Reactive Enterprise Integration库。
12、Akka gRPC
在Akka Streams上流式传输gRPC服务器和客户端。
1、更简单的并发和分布式系统
Actor和流让你建立一个规模的系统了,使用资源的服务器的更有效,并且出,使用多台服务器。
2、设计具有弹性
根据“反应式宣言 Akka”的原则,您可以编写在出现故障时能够自我修复并保持响应能力的系统。
3、高性能
在一台计算机上的速度高达5000万msg / sec。内存占用少;每GB堆约250万个参与者。
4、弹性和分散
分布式系统没有单点故障。跨节点的负载平衡和自适应路由。 带有聚类分片的事件源和CQRS。 使用CRDT实现最终一致性的分布式数据。
5、反应流数据
具有反压的异步非阻塞流处理。完全异步和流式传输的HTTP服务器和客户端为构建微服务提供了一个绝佳的平台。与Alpakka的流集成。
创建Actor
到目前为止,我们已经研究了Actor的定义及其消息。现在让我们更深入地了解位置透明的功能,并了解如何创建Actor实例。
位置透明的力量
在Akka中,您无法使用new关键字创建Actor的实例。而是使用工厂spawn方法创建Actor实例。Spawn不返回参与者实例,而是akka.actor.typed.ActorRef指向参与者实例的引用。这种间接级别在分布式系统中增加了很多功能和灵活性。
在Akka中,位置无关紧要。位置透明性意味着ActorRef容器在保留相同语义的同时,仍表示进程中正在运行的actor的实例或在远程计算机上。
如果需要,运行时可以通过在Actor运行时更改其位置或整个应用程序拓扑来优化系统。这将启用故障管理的“让它崩溃”模型,在该模型中,系统可以通过使有故障的Actor崩溃并重新启动健康的Actor来自我修复。
Akka Actor系统
AnActorSystem是Akka的初始入口点。通常,ActorSystem每个应用程序仅创建一个。AnActorSystem有名字和监护人。应用程序的引导程序通常是在守护程序参与者中完成的。
这位的监护人ActorSystem是GreeterMain。
val greeterMain: ActorSystem[GreeterMain.SayHello] = ActorSystem(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中的对象将创建ActorSystem一个监护人。监护人是引导您的应用程序的顶级参与者。通常使用Behaviors.setup包含初始引导程序的守护程序进行定义。
完整的示例代码
看一下参与者行为,消息的定义以及如何启动ActorSystem:
作为另一个最佳实践,我们应该提供一些测试范围。
测试Actor
Hello World示例中的测试说明了ScalaTest框架的用法。测试范围不完整。它只是说明测试参与者代码是多么容易,并提供了一些基本概念。您可以将其添加为练习来增加自己的知识。
测试类别定义
class AkkaQuickstartSpec extends ScalaTestWithActorTestKit with AnyWordSpecLike {
通过扩展包含对ScalaTest的支持ScalaTestWithActorTestKit。对于其他测试框架,可以直接使用testkit
这管理着ActorTestKit我们将在测试中使用的生命周期
测试方法
此测试使用TestProbe询问并验证预期的行为。让我们看一下源代码片段:
一旦获得对TestProbe的引用,我们会将其作为Greet消息的一部分传递给Greeter 。然后,我们验证Greeter响应是否已发生问候。
完整的测试代码
并且,这是完整的代码:
该示例代码只是从头开始介绍了中提供的功能ActorTestKit。
此扩展提供了集群中参与者的分片功能。典型的用例是,当您有许多有状态的参与者在一起使用的资源(例如,内存)多于一台计算机所容纳的资源。您需要将它们分布在群集中的多个节点上,并且希望能够使用它们的逻辑标识符与它们进行交互,而不必关心它们在群集中的物理位置,该位置也可能随时间而变化。例如,它可以是代表领域驱动设计术语中的聚合根的参与者。在这里,我们称这些参与者为“实体”。这些角色通常具有持久(持久)状态,但是此功能并不限于具有持久状态的角色。
在这种情况下,分片意味着具有标识符(称为实体)的参与者可以自动分布在集群中的多个节点上。每个实体参与者仅在一个地方运行,并且可以将消息发送到实体,而无需发送方知道目标参与者的位置。这是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-distributed-data或 akka-persistence可以保留下来。从集群中删除(通过故障)崩溃或无法访问的协调器节点后,新的ShardCoordinator单例角色将接管并恢复状态。在这样的故障期间,具有已知位置的分片仍然可用,而用于新(未知)分片的消息将被缓冲,直到新的分片ShardCoordinator可用为止。
只要发件人使用相同的ShardRegion参与者将消息传递到实体参与者,消息的顺序就会保留下来。只要未达到缓冲区限制,便以与普通消息发送相同的方式,尽最大努力以最多一次的传递语义传递消息。通过使用AtLeastOnceDeliveryin,可以添加具有至少一次语义的可靠的端到端消息传递akka-persistence。
由于到协调器的往返路程,针对以新的或先前未使用的分片为目标的消息引入了一些额外的延迟。分片的重新平衡也可能会增加延迟。在设计应用程序特定的分片分辨率时,应考虑这一点,例如,避免粒度太细的分片。
该ShardRegion演员也可以在代理仅模式启动,也就是说,它不会举办任何实体本身,而是知道如何委派消息到正确的位置。
如果实体的状态是持久性的,则可以停止不用于减少内存消耗的实体。这是通过实体参与者的特定于应用程序的实现来完成的,例如,通过定义接收超时(context.setReceiveTimeout)。如果邮件在自身停止时已经排队到实体,则该邮箱中的排队消息将被丢弃。为了在不丢失此类消息的情况下支持优雅的钝化,实体参与者可以发送ClusterSharding.Passivate到ActorRef[ShardCommand] 创建实体时传递给工厂方法的对象。.指定的stopMessage消息将发送回实体,然后应该停止自身。传入的消息将ShardRegion 在接收到的消息之间被缓冲Passivate实体的终止。此后,将这些缓冲的消息传递到实体的新化身。
此类仅用于测试目的(例如,存根实现),不能用于用户扩展。将来可能会添加更多方法,并且可能会破坏此类实现。
可以停止和排干MergeHub #30057
类型计时器#30065的初始延迟
Restart运算符#24810和#30141的流属性传播fromMaterializer
Embarcadero RAD Studio(多功能应用程序开发工具) 编程工具177.22 MB12
详情猿编程客户端 编程工具173.32 MB4.16.0
详情猿编程 编程工具173.32 MB4.16.0
详情VSCodium(VScode二进制版本) 编程工具76.23 MBv1.57.1
详情aardio(桌面软件快速开发) 编程工具9.72 MBv35.69.2
详情一鹤快手(AAuto Studio) 编程工具9.72 MBv35.69.2
详情ILSpy(.Net反编译) 编程工具3.97 MBv8.0.0.7339 绿色
详情文本编辑器 Notepad++ 编程工具7.81 MBv8.1.3 官方中文版
详情核桃编程 编程工具272.43 MBv2.1.120.0 官方版
详情delphi2007完整 编程工具1198 MB附安装教程
详情SAPIEN PrimalScript2015 编程工具78.02 MB附带安装教程
详情Alchemy Catalyst可视化汉化工具 编程工具81.00 MBv13.1.240
详情Professional Tag Editor(通用标签编辑器) 编程工具25.6 MBv1.0.6.8
详情Coffeecup HTML Editor(html网页编辑器) 编程工具68.98 MBv15.4 特别版
详情JCreator Pro 编程工具9.65 MBv5.0.1 汉化
详情WebStorm 12中文 编程工具209.88 MB附带安装教程
详情MSWLogo(多功能项目开发与管理工具) 编程工具2.25 MBv6.5 免费版
详情JetBrains datagrip 2018.2.1中文-datagrip 2018.2.1 编程工具160.88 MB附注册码汉化包
详情易安卓5.0 编程工具202 MBv5.0 附破解补丁
详情keil uvision5 编程工具271.63 MB附带安装教程
详情CIMCO Edit V8中文 编程工具248 MB附安装教程
详情IntelliJ IDEA 2020.1(java集成开发环境) 编程工具643.0 MB附安装教程
详情redis desktop manager2020.1中文 编程工具32.52 MB附带安装教程
详情猿编程 编程工具173.32 MB4.16.0
详情信捷PLC编程工具软件 编程工具14.4 MBv3.5.2 官方版
详情源码编辑器 编程工具201.0 MBv3.4.3 官方版
详情Microsoft Visual C++ 编程工具226.00 MBv6.0 SP6 简体中文版
详情s7 200 smart编程软件 编程工具187 MBv2.2 官方中文版
详情TouchWin编辑工具(信捷触摸屏编程软件) 编程工具55.69 MBv2.D2c 官方版
详情易语言5.8完美 编程工具312 MB5.8.1 破解增强版
详情Scraino(少儿编程软件) 编程工具272.93 MBv0.3.0 官方版
详情vs2008中文 编程工具1495 MB附序列号
详情e盾网络验证源码 编程工具25.77 MBV45 官方版
详情codeblocks 编程工具95.21 MBv13.12 中文完整版(带GNW编译器
详情Android Studio(安卓开发环境) 编程工具983.0 MBv3.5.0.21 汉化版(附安装教程)
详情源码编辑器pc版 编程工具201.0 MBv3.4.3 官方版
详情CH341A编程器 编程工具1.06 MB1.30 绿色中文版
详情layuiAdmin pro(layui后台管理模板系统) 编程工具0.57 MBv1.1.0 单页版
详情海龟编辑器 编程工具71.5 MBv0.8.4 中文版
详情Ardublock中文版(Arduino图形化编程软件) 编程工具2.65 MB附带安装教程
详情文本编辑器 Notepad++ 编程工具7.81 MBv8.1.3 官方中文版
详情富途牛牛 编程工具160.59 MBv11.8.9068 官方版
详情微信开发者工具 编程工具129.37 MBv1.05.2105170 官方版
详情UEStudio v18.0.0.18 简体中文绿色 编程工具19.00 MB
详情十六进制编辑器 WinHex 编程工具2.79 MBv20.2 SR-5
详情代码编辑器 Sublime Text 编程工具54.74 MBv4.0.0.4126
详情RJ TextEd(代码编辑器) 编程工具49.46 MBv15.31
详情核桃编程 编程工具272.43 MBv2.1.120.0 官方版
详情影刀 编程工具306.37 MBv4.9.14
详情Kate(高级文本编辑器) 编程工具56.11 MBv21.12.1.1544
详情