首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Akka 2.6非Actor类中的Actor发现(从ActorSystem外部获取ActorRef )

Akka是一个基于Actor模型的并发编程框架,用于构建可扩展、高并发、分布式的应用程序。在Akka 2.6版本中,引入了非Actor类中的Actor发现功能,允许从ActorSystem外部获取ActorRef。

Actor是Akka框架中的基本执行单元,它封装了状态和行为,并通过消息传递进行通信。Actor之间通过ActorRef进行引用和通信。在Akka 2.6之前,只能在Actor内部通过context.actorOf()方法创建ActorRef,无法从外部获取到ActorRef。

Akka 2.6中的非Actor类中的Actor发现功能解决了这个问题。它允许在非Actor类中获取到ActorRef,以便进行消息的发送和接收。这样可以更加灵活地在应用程序的不同部分之间进行通信。

使用非Actor类中的Actor发现功能,可以通过以下步骤获取到ActorRef:

  1. 获取到ActorSystem的引用:可以通过ActorSystem的静态方法ActorSystem.create()或者ActorSystem.create("systemName")来创建一个ActorSystem对象。
  2. 使用ActorSystem的actorSelection()方法获取到Actor的引用:actorSelection()方法接受一个Actor路径作为参数,返回一个ActorSelection对象。可以使用路径表达式来指定要获取的Actor,例如/user/actorName
  3. 通过ActorSelection的resolveOne()方法获取到ActorRef:resolveOne()方法会返回一个Future对象,可以使用Await.result()方法等待Future的完成,并获取到ActorRef对象。

以下是Akka 2.6非Actor类中的Actor发现的优势和应用场景:

优势:

  • 灵活性:非Actor类中的Actor发现功能使得在应用程序的不同部分之间进行通信更加灵活。
  • 解耦合:通过ActorRef进行消息传递,可以实现Actor之间的解耦合,提高系统的可维护性和可扩展性。

应用场景:

  • 分布式系统:在分布式系统中,可以使用非Actor类中的Actor发现功能实现不同节点之间的通信。
  • 微服务架构:在微服务架构中,可以使用非Actor类中的Actor发现功能实现不同服务之间的通信。
  • 并发编程:在需要处理大量并发任务的场景中,可以使用Akka框架和非Actor类中的Actor发现功能来简化并发编程。

腾讯云提供的相关产品和产品介绍链接地址:

  • 腾讯云容器服务(Tencent Kubernetes Engine,TKE):https://cloud.tencent.com/product/tke
  • 腾讯云消息队列(Tencent Cloud Message Queue,CMQ):https://cloud.tencent.com/product/cmq
  • 腾讯云函数计算(Tencent Cloud Serverless Cloud Function,SCF):https://cloud.tencent.com/product/scf

请注意,以上提供的腾讯云产品仅作为示例,其他云计算品牌商也提供类似的产品和服务。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

基于Scala并发编程模型Akka

二、Akka  Actor 模型 2.1  Actor模型介绍         Akka 处理并发方法基于 Actor 模型。在基于 Actor系统里,所有的事物都是 Actor。...对并发模型进行了更高抽象 异步、阻塞、高性能事件驱动编程模型 轻量级事件处理(1GB内存可容纳百万级别个Actor) 为什么 Actor 模型是一种处理并发问题解决方案呢?...") //2.ActorSystem获取HelloActor引用对象ActorRef,并命名 private val helloActorRef: ActorRef = helloActorFactory.actorOf...实际上说明了Dispatcher Message内部是一个线程池,receive()方法实际上是自己Mail Box取出消息,内部类似于调用Runnablerun方法。..."啪啪" } } } 执行: import akka.actor.

1.2K20

你有必要了解一下Flink底层RPC使用框架和原理

另外,每一个actor维护自身单独状态。一个Actors网络如下所示: ? 每个actor是一个单一线程,它不断地其邮箱poll(拉取)消息,并且连续不断地处理。...创建Akka系统 Akka系统核心ActorSystemActor,若需构建一个Akka系统,首先需要创建ActorSystem,创建完ActorSystem后,可通过其创建Actor(注意:Akka...关闭ActorSystem system.terminate(); 在Akka,创建每个Actor都有自己路径,该路径遵循 ActorSystem 层级结构,大致如下: 本地:akka://sys...根据path获取Actor 若提供了Actor路径,可以通过路径获取ActorRef,然后与之通信,代码如下所示: ActorSystem system = ActorSystem.create("...RPC图结构 下图展示了FlinkRPC框架涉及主要。 ? 3.1.

2.2K30

快速入门 Akka Java 指南

因为位置无关紧要,所以 Actor 实例可以启动、停止、移动和重新启动,以向上和向下扩展以及意外故障恢复。...消息应该是不可变,因为它们在不同线程之间共享。 将 Actor 关联消息作为静态放在 Actor 是一个很好实践,这使得理解 Actor 期望和处理消息类型更加容易。...actorOf工厂方法创建 Actor 并接受两个参数,一个名为props配置对象和一个String类型 Actor 名称。 ActorActorSystem 名字在 Akka 很重要。...正如我们在前面讨论,它使用了Printer静态props方法来获取Props值。ActorRef 提供了对新创建 Printer Actor 实例引用。...注意,使用ActorSystem作为容器,并使用actorOf方法创建 Actor。最后,创建要发送给 Actor 消息。

7.7K31

Akka 指南 之「邮箱」

} 现在,每次创建MyBoundedActor类型 Actor 时,它都会尝试获取一个有界邮箱。..." } 将哪个配置传递到邮箱类型 每个邮箱类型都由一个扩展MailboxType并接受两个构造函数参数实现:ActorSystem.Settings对象和Config部分。...后者是通过从 Actor 系统配置获取命名配置节、用邮箱类型配置路径覆盖其id键并添加回退(fall-back)到默认邮箱配置节来计算。...注释:请确保包含一个采用akka.actor.ActorSystem.Settings和com.typesafe.config.Config参数构造函数,因为此构造函数是通过反射调用来构造邮箱类型。...在这之前,发送到ActorRef消息将在本地排队,只有在交换真正填充之后,它们才会被传输到真正邮箱

1.5K30

akka-typed(0) - typed-actor, typed messages

akka 2.6.x正式发布以来已经有好一段时间了。核心变化是typed-actor正式启用,当然persistence,cluster等模块也有较大变化。...一开始名称估摸就是把传统any类型消息改成强类型消息,所以想拖一段时间看看到底能对我们现有基于akka-classic应用软件有什么深层次影响。...不过最近考虑一些系统架构逼我不得不立即开始akka-typed调研,也就是说akka-classic已经无法或者很困难去实现新系统架构,且听我道来:最近在考虑一个微服务台。...现在这个新台可以实现前台应用直接调用对应actor处理业务了。不用多想了,这注定就是akka应用将来,还等什么呢? 先从一个最简单hello程序开始吧:基本上是两个actor相互交换消息。...akka-typed需要用户提供这个顶层actor。这个是在ActorSystem第一个参数指定

53330

Akka事件驱动新选择入门

Actor之间通信是异步、阻塞,从而避免了锁竞争等常见并发问题。同时,Actors可以分布在不同节点上,并通过网络进行通信,从而实现分布式计算。...入门demo: 以下是一个简单Akka demo,演示如何创建一个Actor并发送消息给它: java复制代码import akka.actor.AbstractActor; import akka.actor.ActorRef...; import akka.actor.ActorSystem; import akka.actor.Props; public class HelloWorld extends AbstractActor...在main方法,我们创建了一个ActorSystem,并用它来创建一个HelloWorld Actor实例,然后向它发送一条消息("Hello, world!")...,最后关闭ActorSystem。 接入规则: 建议先学习并掌握Java编程语言和面向对象编程基础知识,以及基本并发编程概念。了解Actor模型和分布式计算基本概念会对使用Akka有很大帮助。

43520

Akka 指南 之「第 1 部分: Actor 体系结构」

我们称之为顶级 Actor,尽管实际上它只是在用户定义层次结构顶部。你ActorSystem通常只有一个(或极少数)顶级 Actor。...我们通过从现有的 Actor 调用context.actorOf()来创建子 Actor顶级 Actor。...akka.actor.ActorRef; import akka.actor.ActorSystem; import akka.actor.Props; class PrintMyActorRefActor...当一个 Actor 失败(抛出一个异常或接收冒出一个未处理异常)时,它将暂时挂起。如前所述,失败信息被传播到父 Actor,然后父 Actor 决定如何处理由子 Actor 引起异常。...我们看到了如何创造一个非常简单 Actor 和其子 Actor。接下来,我们将会把这些知识应该到我们示例获取设备 Actor 信息。稍后,我们将讨论如何管理小组 Actor

93020

Akka(8): 分布式运算:Remoting-远程查找式

Akka是一种消息驱动运算模式,它实现跨JVM程序运算方式是通过能跨JVM消息系统来调动分布在不同JVM上ActorSystemActor进行运算,前题是Akka地址系统可以支持跨JVM定位...Akka消息系统最高境界可以实现所谓Actor位置透明化,这样在Akka编程中就无须关注Actor具体在哪个JVM上运行,分布式Actor编程方式上跟普通Actor编程就不会有什么区别了。...AkkaRemoting是一种点对点跨JVM消息通道,让一个JVM上ActorSystem某个Actor可以连接另一个JVM上ActorSystem另一个Actor。...Akka-Remoting提供了两种Actor之间沟通方法: 1、远程查找:通过路径Path查找在远程机上已经创建存在Actor获取ActorRef后进行沟通 2、远程创建:在远程机上直接创建Actor...我们会把这个计算器部署到远程机上,然后本机与之沟通分配运算任务及获取运算结果。

1.8K90

Akka(24): Stream:外部系统控制数据流-control live stream from external system

在数据流应用现实场景中常常会遇到与外界系统对接需求。这些外部系统可能是Actor系统又或者是一些其它类型系统。...与这些外界系统对接意思是在另一个线程运行数据流可以接收外部系统推送事件及做出行为改变响应。...外部系统可以通过调用这个控制函数来向GraphStage发送信息,控制GraphStage行为。akka-stream是多线程异步模式程序,所以这个函数只能是一个异步运行回调callback。...插入了一个正在运行数据流并在最后终止了这个数据流。 另外,一个GraphStage也可以被外界当作一种Actor来进行交流。...下面是本次示范源代码: GetAsyncCallBack.scala import akka.actor._ import akka.stream._ import akka.stream.scaladsl

665100

Akka事件驱动新选择

在高并发场景解决方案,多线程角度出发,以解决线程安全问题,锁范围又需要多业务场景考虑,何时上锁,何时解锁,何时自动过期等,而事件驱动是执行什么操作驱动,在软件系统设计层面,两者关联性不大,一个强调安全...Akka 允许我们专注于满足业务需求,而不是编写初级代码。在 Akka Actor 之间通信唯一机制就是消息传递。...因为位置无关紧要,所以 Actor 实例可以启动、停止、移动和重新启动,以向上和向下扩展以及意外故障恢复。...,与MQ中间件思路无疑,而我们应用Akka时应该考虑到应用场景,既然应用于事件驱动,那么其处理消息必须要考虑到实时性场景。...actorSystem; @Test public void contextLoads() { ActorRef ref = actorSystem.actorOf(

89530

Akka(1):Actor - 靠消息驱动运算器

从这个案例结论是尽量把Akka Actor使用在需要维护内部状态应用。如果为了实现non-blocking只需要把程序分布到不同线程里运行的话就应该直接用Future,这样自然多。...好了,回到正题:功能上Actor是由实例引用(ActorRef),消息邮箱(Mailbox),内部状态(State),运算行为(Behavior),子类下属(Child-Actor),监管策略(Supervision...我们在本篇先介绍一下ActorRef,Mailbox,State和Behavior。 1、ActorRefAkka系统是一个树形层级式结构,每个节点由一个Actor代表。...Actor外部接收消息都是先存放在Mailbox里。系统默认Mailbox无限数量消息是按时间顺序排列,但用户可以按照具体需要定制Mailbox,比如有限容量信箱、按消息优先排序信箱等。...3、Behavior:简单来说就是对Mailbox里消息反应方式。Mailbox临时存放了外界传来指令,如何运算这些指令、产生什么结果都是由这些指令运算函数来确定。

59460

akka-typed(2) - typed-actor交流方式和交流协议

akka系统是一个分布式消息驱动系统。akka应用由一群负责不同运算工作actor组成,每个actor都是被动等待外界某种消息来驱动自己作业。...想想看,如果用户需要一个actor做某件事,他必须用这个actor明白消息类型来发送消息,这就是一种交流协议。 所谓消息交流方式包括单向和双向两。...如果涉及两个actor之间消息交换,消息发送方式可以是单向和双向。但如果是外界向一个actor发送消息,那么肯定只能是单向发送方式了,因为消息发送两端只有一端是actor。...system.asInstanceOf[ActorSystem[Printer.PrintMe]].terminate() } 当然,在现实通常我们要求actor去进行某些运算然后返回运算结果。...就是说一个response不一定是按照request接收顺序返回,只是它们之间能够交流而已。不过,在akka-typed这种模式最基本要求就是发送消息类型必须符合接收方actor类型。

69410

阅读源码|Spark 与 Flink RPC 实现

来引用其他 Actor ,同时,在实现,需要一个支持 Actor Model 运行起来 ActorSystem 环境。...例如 RpcEndpoint 对应 Actor RpcEndpointRef 对应 ActorRef RpcEnv 对应 ActorSystem RpcEndpoint 与消息处理模型 这其中模型上来说最简单反而是...不过,在一个常见场景,你在处理消息时候发起了另一个异步动作,在异步动作调用 sender() 来获取当前消息来源。...而在 Typed Akka ,由于 sender() 无法确切类型化,因此采用是将消息来源直接编码在发送消息方式以在需要时候使用它回复消息,这要求 ActorRef 在不同 ActorSystem...每个 RpcEndpoint 实际绑定消息处理触发器是 Inbox,Inbox 相当于 Actor Model Mailbox,负责接收外部发到当前 RpcEndpoint 即 Actor 消息

1.2K20
领券