安下载编程开发

分类分类

Akka Actor模型开发库

Akka Actor模型开发库

v2.6.14 官方版

大小:15.0 MB 更新:2021/04/19

类别:编程工具系统:WinXP, Win7, Win8, Win10, WinAll

立即下载

  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 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引导应用程序。

Akka Actor模型开发库

  生成child actors

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

Akka Actor模型开发库

  异步通讯

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

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

  发送消息给Actor

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

Akka Actor模型开发库

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

  主班

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

Akka Actor模型开发库

  完整的示例代码

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

Akka Actor模型开发库
Akka Actor模型开发库
Akka Actor模型开发库

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

  测试Actor

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

  测试类别定义

  class AkkaQuickstartSpec extends ScalaTestWithActorTestKit with AnyWordSpecLike {

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

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

  测试方法

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

Akka Actor模型开发库

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

  完整的测试代码

  并且,这是完整的代码:

Akka Actor模型开发库

  该示例代码只是从头开始介绍了中提供的功能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

精品推荐
同类推荐
相关下载
  • 最新排行
  • 最热排行
  • 评分最高
编程开发排行榜
实时热词