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

如何从Akka中的非actor获取对现有actor的引用?

在Akka中,从非actor获取对现有actor的引用可以通过以下步骤实现:

  1. 首先,确保你已经创建了需要引用的actor。可以使用Akka的ActorSystem来创建actor,或者通过其他actor创建新的子actor。
  2. 在非actor的代码中,你可以使用ActorSelection类来获取对现有actor的引用。ActorSelection类提供了一种通过actor的路径来查找actor的机制。
  3. 构造ActorSelection对象时,需要提供actor的路径。路径可以是绝对路径或相对路径。绝对路径从根路径开始,相对路径从当前actor的路径开始。
  4. 通过ActorSelection对象,你可以使用tell方法向目标actor发送消息,或者使用resolveOne方法获取对actor的引用。

以下是一个示例代码,演示了如何从Akka中的非actor获取对现有actor的引用:

代码语言:scala
复制
import akka.actor.{Actor, ActorRef, ActorSystem, Props}

// 创建一个Actor
class MyActor extends Actor {
  def receive: Receive = {
    case msg: String => println(s"Received message: $msg")
  }
}

object Main {
  def main(args: Array[String]): Unit = {
    // 创建ActorSystem
    val system = ActorSystem("MySystem")

    // 创建一个MyActor实例
    val myActor: ActorRef = system.actorOf(Props[MyActor], "myActor")

    // 在非actor的代码中获取对myActor的引用
    val actorSelection = system.actorSelection("/user/myActor")

    // 向myActor发送消息
    actorSelection.tell("Hello", ActorRef.noSender)

    // 关闭ActorSystem
    system.terminate()
  }
}

在上述示例中,我们创建了一个名为MyActor的actor,并将其路径命名为/user/myActor。然后,在非actor的代码中,我们使用ActorSelection类获取对myActor的引用,并向其发送了一条消息。

请注意,上述示例中的代码是使用Scala编写的,但Akka也支持Java编程语言。对于Java代码,你可以使用ActorSelection类的相应方法来实现相同的功能。

对于腾讯云相关产品和产品介绍链接地址,由于要求不能提及具体的云计算品牌商,建议你参考腾讯云的官方文档和网站,以获取有关腾讯云在云计算领域的产品和服务信息。

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

相关·内容

Akka 指南 之「Actor 模型如何满足现代分布式系统需求?」

Actor 模型如何满足现代分布式系统需求? 如前一主题「为什么现代系统需要新编程模型」所述,常见编程实践不能合适地满足现代系统需求。幸运是,我们不需要放弃我们所知道一切。...一个(隐藏)调度程序实体获取 Actor 并开始执行它。 Actor 队列前面选择消息。 Actor 修改内部状态,向其他 Actor 发送消息。...消息进入 Actor 邮箱。Actor 行为描述了 Actor 如何响应消息(如发送更多消息和/或更改状态)。执行环境协调线程池以完全透明地驱动所有这些操作。...Akka 要求所有 Actor 都被组织成一个树形结构,即一个创造另一个 Actor Actor 成为新 Actor 父节点。这与操作系统将流程组织到树方式非常相似。...总是有一个负责管理 Actor 实体:它父节点。外部看不到重新启动:协作 Actor 可以在目标 Actor 重新启动时继续发送消息。 现在,让我们简单介绍一下 Akka 提供功能。

1.2K30

PowerJob 原理剖析之 Akka Toolkit

邮箱:邮箱是 ActorActor 之间通信桥梁,邮箱内部通过 FIFO(先入先出)消息队列来存储发送方 Actor 消息,接受方 Actor 邮箱队列获取消息。 ?...二、Akka Toolkits Akka Toolkit 也就是 Akka 工具包,其实就是 JVM 平台上 Actor 模型一种实现。...Akka 本身提供了完整 Actor 模型支持,包括并发/并行程序简单、高级别的抽象、异步、阻塞、高性能事件驱动编程模型和非常轻量事件驱动处理。...刚刚 Actor 代码可以看出,match 方法后面跟是一个具体类,也就是说 Akka 自动帮你完成了反序列化,作为消息接收方,是真正拿到就能用,没有任何多余代码。...tell(response, getSelf()); 通过 getSender() 方法,就能获取到消息发送方 Actor 引用对象,并通过该对象回复信息。

1.3K20

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

我们通过从现有Actor 调用context.actorOf()来创建子 Actor顶级 Actor。...在这个小实验,我们创建了一个 Actor,打印了它引用,创建了这个 Actor 一个子 Actor,并打印了这个子 Actor 引用。...当一个 Actor 失败(抛出一个异常或接收冒出一个未处理异常)时,它将暂时挂起。如前所述,失败信息被传播到父 Actor,然后父 Actor 决定如何处理由子 Actor 引起异常。...总结 我们已经了解了 Akka如何管理层级结构 Actor ,在层级结构,父 Actor 会监督他们Actor 并处理异常情况。...我们看到了如何创造一个非常简单 Actor 和其子 Actor。接下来,我们将会把这些知识应该到我们示例获取设备 Actor 信息。稍后,我们将讨论如何管理小组 Actor

93820

基于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方法。

1.2K20

Akka 指南 之「Actor 引用、路径和地址」

Actor 引用、路径和地址 本章描述如何在可能分布式 Actor 系统中标识和定位 Actor。...,并将其与该路径其他现有 Actor 引用进行比较,其中一些引用可能是在 Actor 死亡之前获得。...Actor 引用化身(incarnation)化身无效。发送到旧 Actor 引用消息将不会传递到新化身,即使它们具有相同路径。...对于如何获取 Actor 引用,有两个通用类别:通过创建 Actor 或通过查找 Actor,后者功能包括具体 Actor 路径创建 Actor 引用和查询逻辑 Actor 层次结构。...这些方法返回新创建 Actor 引用。每个 Actor 都可以(通过其ActorContext)直接访问其父级、自身及其子级引用

1.7K20

Akka 指南 之「Actors」

警告:在另一个 Actor 声明一个 Actor 是非常危险,并且会破坏 Actor 封装。千万不要把 Actor this引用传给Props!...这也避免了与使用Props.create(...)方法相关联陷阱,该方法将参数作为构造函数参数,因为在静态方法,给定代码块不会保留其封闭范围引用: static class DemoActor...此外,它还提供: getSelf(), Actor ActorRef引用 getSender(),前一次接收到消息发送方 Actor 引用 supervisorStrategy(),用户可重写定义用于监视子...要获取ActorRef以进行ActorSelection,你需要向选择发送消息,并使用来自 Actor 答复getSender()引用。...调用unstashAll()将消息stash排队到 Actor 邮箱,直到达到邮箱容量(如果有),请注意,stash消息是预先发送到邮箱

4K30

Akka 指南 之「邮箱」

} 现在,每次创建MyBoundedActor类型 Actor 时,它都会尝试获取一个有界邮箱。...如果发生冲突,例如,如果 Actor 需要不满足此要求邮箱类型,则 Actor 创建将失败。 如何选择邮箱类型 创建 Actor 时,ActorRefProvider首先确定执行它调度器。...后者是通过从 Actor 系统配置获取命名配置节、用邮箱类型配置路径覆盖其id键并添加回退(fall-back)到默认邮箱配置节来计算。...java.util.PriorityQueue提供支持 优先级相同邮件传递顺序未定义,与BoundedStablePriorityMailbox相反 是否阻塞:如果与零mailbox-push-timeout-time...在幕后,构建了一种空 Actor 引用,将其发送给系统守护者 Actor,该 Actor 实际上创建了 Actor 及其上下文,并将其放入引用

1.5K30

Akka 指南 之「Akka 和 Java 内存模型」

本文讨论了 LightBend 平台,特别是 Akka 如何在并发应用程序处理共享内存。 Java 内存模型 在 Java 5 之前,Java 内存模型(JMM)是定义有问题。...Actors 和 Java 内存模型 通过 Akka Actor 实现,多个线程可以通过两种方式在共享内存上执行操作: 如果消息发送给某个 Actor(例如由另一个 Actor)。...Actor 后续处理规则:一条消息处理发生在同一 Actor 处理下一条消息之前。 注释:在外行术语,这意味着当 Actor 处理下一条消息时,Actor 内部字段更改是可见。...我们建议不要关闭final字段(Java final和 Scala val),如果选择关闭final字段,则必须标记volatile,以便字段的当前值回调可见。...如果关闭引用,还必须确保引用实例是线程安全。我们强烈建议远离使用锁定对象,因为它可能会导致性能问题,在最坏情况下还会导致死锁。这就是同步危险。

94820

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

另外,每一个actor维护自身单独状态。一个Actors网络如下所示: ? 每个actor是一个单一线程,它不断地其邮箱poll(拉取)消息,并且连续不断地处理。...),另外,我们只能通过ActorRef(Actor引用, 其原生 Actor 实例做了良好封装,外界不能随意修改其内部状态)来与Actor进行通信。...如下代码展示了如何配置一个Akka系统。 // 1....构建Actor,获取Actor引用,即ActorRef ActorRef helloActor = system.actorOf(Props.create(HelloActor.class), "helloActor...总结 RPC框架是Flink任务运行基础,Flink整个RPC框架基于Akka实现,并AkkaActorSystem、Actor进行了封装和使用,文章主要分析了Flink底层RPC通信框架实现和相关流程

2.2K30

快速入门 Akka Java 指南

位置透明:Location transparency,系统通过工厂方法构造 Actor 并返回实例引用。...因为位置无关紧要,所以 Actor 实例可以启动、停止、移动和重新启动,以向上和向下扩展以及意外故障恢复。...现在,让我们更深入地了解位置透明(location transparency)好处,看看如何创建 Actor 实例。 位置透明好处 在 Akka ,不能使用new关键字创建 Actor 实例。...正如我们在前面讨论,它使用了Printer类静态props方法来获取Props值。ActorRef 提供了新创建 Printer Actor 实例引用。...这就是为什么我们记录东西时会有很多额外信息。日志输出包含诸如何时和哪个 Actor 记录日志之类信息。现在,让我们将重点放在 Printer Actor 输出上: ...

7.7K31

聊聊Akka

Akka简介 当前社会,人们越来越享受互联网带来种种便利,同时也互联网产品有了更高要求,比如更快响应速度和更稳定服务;另一方面,互联网产品在不断发展过程也面临着非常多技术挑战,比如服务化...异步阻塞:Akka-Actor消息通信都是基于异步阻塞。 高容错性:为跨多JVM分布式模型提供强劲容错处理,号称永不宕机。...总之,高并发和密集计算系统,Akka都是适用!...在Akka,整个Actor体系被抽象成一个ActorSystem,它是一个层级结构,拥有公共行为配置和管理。...图1-4 Akka基本架构体系及周边产品 Actor组件 在AkkaActor是一个高度抽象对象引用,它包含以下几个要素: 引用(ActorReference) Actor引用不同于普通对象引用

2K30

Akka 指南 之「持久化」

事件源 请参阅「EventSourcing」介绍,下面是 Akka 通过持久性 Actor 实现。 持久性 Actor 接收(持久性)命令,如果该命令可以应用于当前状态,则首先其进行验证。...持久化 Actor createReceiveRecover方法通过处理Evt和SnapshotOffer消息来定义在恢复过程如何更新状态。...如果日志恢复 Actor 状态时出现问题,则调用onRecoveryFailure(默认情况下记录错误),Actor 将停止。...如果在启动 Actor 时无法日志恢复 Actor 状态,将调用onRecoveryFailure(默认情况下记录错误),并且 Actor 将被停止。...警告:如果你使用「持久性查询」,查询结果可能会丢失日志已删除消息,这取决于日志插件如何实现删除。

3.3K30

Akka 指南 之「容错」

文章目录 容错 依赖 简介 实践故障处理 创建监督策略 默认监督策略 停止监督策略 记录 Actor 失败 顶级 Actor 监督者 测试应用 容错 依赖 容错(fault tolerance...首先,一一策略(one-for-one strategy)意味着每个子级都被单独对待(这和all-for-one策略效果非常相似,唯一区别是all-for-one策略任何决定都适用于监督者所有子级...注释:如果策略在监督者 Actor(而不是单独类)声明,则其决策者可以线程安全方式访问 Actor 所有内部状态,包括获取当前失败子级引用,可用作失败消息getSender()。...请注意,当在监督者 Actor 内部声明SupervisorStrategy时,当前失败子级引用可用作sender。...,测试更容易,其中TestProbe提供了一个 Actor 引用,可用于接收和检查回复。

85330

Akka 指南 之「消息传递可靠性」

下文将进一步讨论这种权衡(trade-off)细节。 作为补充部分,我们如何在内置基础上构建更强可靠性给出了一些建议。...讨论:消息排序 更具体规则是,对于给定 Actor,直接第一个 Actor 发送到第二个 Actor 消息不会被无序接收。...可能详尽指示清单是: 在接收到顶级 Actor 第一个回复之前,存在一个保护内部临时队列锁,而这个锁是不公平;这意味着,根据低级线程调度,来自不同发送方排队请求在 Actor 构造过程到达...对于给定 Actor,直接第一个 Actor 发送到第二个 Actor 消息将不会被无序接收,这一规则适用于使用基于 TCP Akka 远程传输协议通过网络发送消息。...Actor 可以订阅事件流上akka.actor.DeadLetter,请参阅「事件流」了解如何执行该操作。然后,订阅 Actor 将收到(本地)系统从那时起发布所有死信。

1.7K10

Spark netty RPC 通信原理

(image-a95df3-1646009602027)] 在Akka重要是actor模型和 mailBox 通信系统,每一个Actor都维护一个Mailbox, 既可以收发消息。...(image-70d8f7-1646009602027)] 如图所示,在sparkEndpoint 就相当于AkkaActor 。...RpcEndPointRef: RpcEndpointRef是一个RpcEndpoint远程引用对象,每个RpcEndpoint可以有多个引用,通过它可以向远程RpcEndpoint端发送消息以进行通信...简言之,可以认为TransportClient就是Spark Rpc 最底层基础客户端类。主要用于向server端发送rpc 请求和server 端获取chunk块。...MessageDecoder:管道读取ByteBuf进行解析,防止丢包 TransportFrameDecoder:管道读取ByteBuf按照数据帧进行解析; StreamManager

86020

阅读源码|Spark 与 Flink RPC 实现

简介 Actor Model 及 Akka 问题 通常来说,阅读代码流程是首先了解自己要阅读代码解决了什么问题,这个问题现有解决方案是什么,有什么优势和缺点。...来引用其他 Actor ,同时,在实现,需要一个支持 Actor Model 运行起来 ActorSystem 环境。...这些具体概念和名词属于 Akka,我们会在后面看到它们如何在 Spark 和 Flink 中被一一应。...不过,在一个常见场景,你在处理消息时候发起了另一个异步动作,在异步动作调用 sender() 来获取当前消息来源。...获取可用本地或远端 RpcEndpointRef,这是一个 RpcEndpoint 位置透明引用或者叫句柄,可以通过调用它 send 或 ask 方法来向 RpcEndpoint 发送信息

1.2K20

ElasticMQ 0.7.0:使用Akka和Spray长轮询,阻塞实现

这是一次重要重写,核心部分是使用Akka Actor和REST层则采用Spray。目前为止,只有核心部分和SQS模块被重写;SQL后端和复制(Replication)尚在进行。...Spray有一个很好教程,如果您有兴趣,我鼓励您看看。 如何使用路由中队列Actor来完成HTTP请求?...这看起来像完全正常顺序代码,但是在执行时,第一次使用Future开始将会异步运行。 长轮询 因为所有的代码都是异步和阻塞,实现长轮询非常容易。...当接收消息请求到达,并且队列没有任何内容时,我们不是立即回复(即向发送者Actor发送空列表),而是将原始请求引用和发送方actor存储在一个map。...使用Akka调度程序,我们还计划在指定超时之后发回空列表并删除条目。 当新消息到达时,我们只需map上获取一个等待请求,然后尝试完成它。同样,所有同步和并发问题都由Akka和参与者模型来处理。

1.5K90
领券