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

Akka:在ask上丢失了对`child.path.name`的引用

Akka是一个开源的分布式计算框架,用于构建高可伸缩、高并发、可容错的分布式应用程序。它基于Actor模型,通过消息传递实现并发和分布式计算。

在Akka中,ask是一种用于向Actor发送消息并等待其返回结果的机制。然而,在使用ask时,可能会遇到对child.path.name引用丢失的问题。

child.path.name是指Actor的路径名称,用于唯一标识一个Actor。当使用ask向一个Actor发送消息时,如果在等待结果的过程中,该Actor被重新创建或者被销毁,那么对child.path.name的引用就会丢失。

为了解决这个问题,可以使用Actor的引用(ActorRef)来代替对child.path.name的引用。Actor的引用是一个不可变的对象,它可以在Actor重新创建或销毁后仍然有效。通过使用Actor的引用,可以确保在使用ask时不会丢失对Actor的引用。

对于Akka的应用场景,它适用于构建高并发、分布式、可容错的系统,特别是在需要处理大量并发请求或者需要实现消息驱动的系统中。例如,社交网络应用、实时数据处理系统、游戏服务器等都可以使用Akka来实现。

腾讯云提供了一系列与Akka相关的产品和服务,包括云服务器、容器服务、消息队列、数据库等。具体推荐的产品和产品介绍链接地址可以参考腾讯云官方网站的相关页面。

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

相关·内容

Akka 指南 之「Actors」

这也避免了与使用Props.create(...)方法相关联的陷阱,该方法将参数作为构造函数参数,因为在静态方法中,给定的代码块不会保留对其封闭范围的引用: static class DemoActor...Ask: Send-And-Receive-Future ask模式涉及 Actor 和Future,因此它是作为一种使用模式而不是ActorRef上的一种方法提供的: import static akka.pattern.Patterns.ask...和pipeTo模式在Future上的结合,因为这可能是一个常见的组合。...对它们进行注册,以便它们在 Akka 内部关闭钩子之前运行,例如关闭 Akka 远程处理。...其中一个潜在的问题是,消息在发送到远程 Actor 时可能会丢失。此外,在未初始化状态下发布ActorRef可能会导致在初始化完成之前接收到用户消息的情况。

4.2K30

阅读源码|Spark 与 Flink 的 RPC 实现

后面我们会看到 Flink 对这一点做了不同的选择,介绍完 Flink 的情况后我们会做一个总的探讨。 另一个接口就比较有意思了,receiveAndReply 实现了接收信息后返回的功能。...我们跳转到定义并查找初始化点,可以发现生成这两种不同信息的差异的根源发生在 RpcEndpointRef 是调用 ask 还是 send 上,在唯一的 Netty 实现上一路会经过 NettyRpcEnv...上面提到的 ask 导致竞态条件的问题在 Akka 中也存在,这倒不算 BUG,只是在使用的时候需要注意采用合适的同步策略。...Akka 基本一一对应的骨架是不一样的,主要的矛盾点在 RpcServer 这一层上。...总的来说,Flink 的 RPC 实现概念混乱,试图实现 Actor Model 但是概念对应上由于其本质上是在 Actor Model 上糊了一层 Actor Model 但是又复用了底层的 ActorSystem

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

    ),另外,我们只能通过ActorRef(Actor的引用, 其对原生的 Actor 实例做了良好的封装,外界不能随意修改其内部状态)来与Actor进行通信。...关闭ActorSystem system.terminate(); 在Akka中,创建的每个Actor都有自己的路径,该路径遵循 ActorSystem 的层级结构,大致如下: 本地:akka://sys...会先启动ActorSystem,此时TaskExecutor的Container还未分配,后面与TaskExecutor通信时,必须让其提供对应地址,从类继承图可以看到基本上所有组件都实现了RpcGateway...; 经过上述步骤就完成Rpc(本地/远程)调用,可以看到底层也是通过Akka提供的tell/ask方法进行通信;经过上述步骤就完成Rpc(本地/远程)调用,可以看到底层也是通过Akka提供的tell/ask...总结 RPC框架是Flink任务运行的基础,Flink整个RPC框架基于Akka实现,并对Akka中的ActorSystem、Actor进行了封装和使用,文章主要分析了Flink底层RPC通信框架的实现和相关流程

    2.4K30

    Flink源码分析之RPC通信

    服务端实现了RPC协议,即实现了接口中定义的方法,做具体的业务逻辑处理。客户端实现了RPC协议,客户端是Proxy生成的代理对象,将对RpcGateway接口方法的调用转为Akka的消息发送。...RpcEndpointRPC服务端的抽象,实现了该接口即为Rpc服务端,是Akka中Actor的封装。...方式发送消息并等待结果 // Ask在实现上实际上是会创建一个Actor等待响应结果,成功或者超时时,销毁Actor return Patterns.ask(...如果执行的方法有返回值就使用Akka ask方式,否则以tell方式发送消息。通过连接的服务端的地址可以判断出服务端在远程还是本地。...启用了HA 可以是ZK或者K8S ZK是通过NodeCache监听了一个节点的数据变化,这个节点上保存了leader信息 K8S是Watch了一个ConfigMapJobMaster.java

    1.6K133

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

    下文将进一步讨论这种权衡(trade-off)的细节。 作为补充部分,我们对如何在内置的基础上构建更强的可靠性给出了一些建议。...方法,也是ask模式的基础): 至多一次传递(at-most-once delivery),即没有保证的传递 每个sender–receiver对(pair)的消息排序 第一个规则通常也存在于其他 Actor...本地消息发送的可靠性 Akka 测试套件依赖于在本地上下文中不丢失消息(对于非错误条件测试也适用于远程部署),这意味着我们确实尽了最大努力保持测试的稳定性。...因为在 JVM 上不存在完全公平的锁,所以这是不可修复的。 同样的机制在Router的构建过程中使用,更精确地说是路由的ActorRef,因此对于部署了路由器的 Actor 来说,同样的问题也存在。...高级抽象 基于 Akka 核心中的一个小而一致的工具集,Akka 还提供了强大的、更高级的抽象。 消息模式 如上所述,对可靠传递需求的直接回答是一个明确的ACK-RETRY协议。

    1.8K10

    spark RPC原理

    概述 Spark-1.6以后RPC默认使用Netty替代Akka,在Netty上加了一层封装,为实现对Spark的定制开发,所以了解Spark中RPC的原理还是有必要的 Akka是一个异步的消息框架,所谓的异步...根据社区的说法,因为很多Spark用户饱受Akka复杂依赖关系的困扰,所以后来干脆就直接用Netty代替了Akka。 2. Spark 1.6+ 中的RPC ?...,后面会有介绍 2.2 RpcEndpointRef RpcEndpoint的一个引用,当我们需要向一个具体的RpcEndpoint发送消息时,一般我们需要获取到该RpcEndpoint的引用,然后通过该应用发送消息...3.5 master中消息处理 上文可以看到,在RpcEndpoint中最核心的便是receive和receiveAndReply方法,定义了消息处理的核心逻辑,master中也有相应的实现: override...3.9worker到master的通信 worker和master之间是一个主从关系,worker注册到master之后,master就可以通过消息传递实现对worker的管理,在worker中有一个方法

    1K20

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

    akka.pattern.ask创建这个 Actor 引用。 DeadLetterActorRef是死信服务的默认实现,Akka 将其目的地关闭或不存在的所有消息路由到该服务。...Actor 引用旧的化身(incarnation)对新的化身无效。发送到旧 Actor 引用的消息将不会传递到新的化身,即使它们具有相同的路径。...这些方法返回对新创建的 Actor 的引用。每个 Actor 都可以(通过其ActorContext)直接访问其父级、自身及其子级的引用。...但是,在监督者中查找子级的名称会在远程节点上找到它,保留逻辑结构,例如发送到未解析的 Actor 引用时。 ? 地址部分用于什么? 当通过网络发送 Actor 引用时,它由其路径表示。..."/deadletters"是死信 Actor,即所有发送到已停止或不存在的 Actor 的消息都会重新路由(在尽最大努力的基础上:消息也可能会丢失,即使是在本地 JVM 中)。

    1.8K20

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

    本文讨论了 LightBend 平台,特别是 Akka 如何在并发应用程序中处理共享内存。 Java 内存模型 在 Java 5 之前,Java 内存模型(JMM)是定义有问题的。...Actors 和 Java 内存模型 通过 Akka 中的 Actor 实现,多个线程可以通过两种方式在共享内存上执行操作: 如果消息发送给某个 Actor(例如由另一个 Actor)。...如果关闭引用,还必须确保引用的实例是线程安全的。我们强烈建议远离使用锁定的对象,因为它可能会导致性能问题,在最坏的情况下还会导致死锁。这就是同步的危险。...Actors 和共享可变状态 由于 Akka 在 JVM 上运行,所以仍然需要遵循一些规则。...关闭内部 Actor 状态并将其暴露给其他线程 import akka.actor.{ Actor, ActorRef } import akka.pattern.ask import akka.util.Timeout

    1K20

    聊聊Akka

    Akka简介 当前社会,人们越来越享受互联网带来的种种便利,同时也对互联网产品有了更高的要求,比如更快的响应速度和更稳定的服务;另一方面,互联网产品在不断发展的过程中也面临着非常多的技术挑战,比如服务化...图1-4 Akka基本架构体系及周边产品 Actor组件 在Akka中,Actor是一个高度抽象的对象引用,它包含以下几个要素: 引用(ActorReference) Actor的引用不同于普通对象的引用...实际上,Akka为每个Actor都抽象出一个轻量级的执行“线程”(不是真的线程),在底层已经实现了隔离性,所以基本上不用担心该问题的出现。...另外,当JVM崩溃时,为了避免Actor状态的丢失,我们可以借助持久化方案来对状态进行持久化操作。...当程序出错, JVM崩溃时,任何关键状态的丢失,对我们后续的业务来讲都可能是致命的打击,所以状态数据的持久化变得非常重要。Akka提供了Actor状态的持久化方案,以便我们在必要时恢复数据。

    2.2K30

    akka-typed(9) - 业务分片、整合,谈谈lagom, 需要吗?

    然后各系统之间的集成可以通过一个流运算工具如kafka实现各聚合根之间的交互连接。 似乎所有需要的工具都齐备了,其中akka占了大部分功能。但有些问题是:基于akka技术栈来编程或多或少有些门槛要求。...最起码需要一定程度的akka开发经验。更不用提组织一个开发团队了。如果市面上有个什么能提供相应能力的开发工具,可以轻松快速上手的,那么项目开发就可以立即启动了。...多个用户调用一项业务功能代表多个entity分布在不同的集群节点上并行运算。...发送给了某个用户指定节点上的entity。...都会自动在某个节点上构建一个新的entity,如果上万个用户使用过某个功能,那么就会有万个entity及其所占用的资源如mongodb客户端等停留在内存里。

    80620

    聊聊flink的RpcServer

    序 本文主要研究一下flink的RpcServer apache-flink-akka-for-the-win-6-638.jpg RpcGateway flink-release-1.7.2/flink-runtime...方法使用的是tell方法,调用rpcEndpoint.tell传递RunAsync消息;callAsync方法使用的是ask方法,调用Patterns.ask,传递CallAsync消息 start方法执行...ActorRef.noSender());invoke方法针对Object、RpcGateway、MainThreadExecutable、StartStoppable、AkkaBasedEndpoint、RpcServer的方法则对当前对象进行对应方法调用...方法内部调用的是scheduleRunAsync;scheduleRunAsync方法使用的是tell方法,调用rpcEndpoint.tell传递RunAsync消息;callAsync方法使用的是ask...ActorRef.noSender());invoke方法针对Object、RpcGateway、MainThreadExecutable、StartStoppable、AkkaBasedEndpoint、RpcServer的方法则对当前对象进行对应方法调用

    88620

    akka-grpc - 应用案例

    不过有些项目需求不等人,需要使用这项技术,所以研究了一下akka-grpc,写了一篇介绍。本想到此为止,继续其它项目。想想这样做法有点不负责任,像是草草收场。...毕竟用akka-grpc做了些事情,想想还是再写这篇跟大家分享使用kka-grpc的过程。 我说过,了解akka-grpc的主要目的还是在protobuf的应用上。这是一种高效率的序列化协议。...由于终端数量多、图像处理又特别消耗内存、CPU等计算资源、又要求快速响应,所以第一考虑就是使用akka-cluster把图像处理任务分割到多个节点上并行处理。...这里就需要仔细考虑图片在终端到平台、然后集群节点与点actor间的传输效率了。如何在akka系统里使用protobuf格式的数据正是本篇讨论和示范的目的。...在任意集群节点上实时构建的一个opencv图像处理器。

    89610

    akka-typed(6) - cluster:group router, cluster-load-balancing

    任何节点上的actor都可以发送注册消息在Receptionist上登记 3、没有size限制,任何actor一旦在Receptionist上登记即变成routee,接受router管理 应该说如果想把运算任务分配在集群里的各节点上并行运算实现...不过对不同的运算任务需要多少routee则需要用户自行决定,不像以前akka-classic里通过cluster-metrics根据节点负载情况自动增减routee实例那么方便。...就是说任何节点上的actor都可以在Receptonist上注册形成一个生存在集群中不同节点的actor清单。...实际上,在sender方是通过ctx.ask提供了TextTransformed的类型转换。...因为group-router是通过Receptionist来实现对routees管理的,而Receptionist是集群全局的,意味着如果我们在各节点上构建routee,然后向Receptionist登记

    78520

    生产上的坑才是真的坑 | 盘一盘Flink那些经典线上问题

    (“acks”, “0”); 将 acks=0,即KafkaProducer在客户端,只要把消息发送出去,不管那条数据有没有在哪怕Partition Leader上落到磁盘,直接就认为这个消息发送成功了...在yarn上kill了,分析原因应该是资源不够,可以将程序放在资源更大的集群上,再不行就设置减少Slot中共享的task的个数,也可能是内存泄露或内存资源配置不合理造成,需要进行合理分配。...在flink-conf.yaml中添加或修改:akka.ask.timeout: 100s web.timeout: 100000 Checkpoint:Checkpoint expired before...将该 Flink App 调度在 Per Slot 内存更大的集群上。...程序起的并行是否都正常分配了(会有这样的情况出现,假如 5 个并行,但是只有 2 个在几点上生效了,另外 3 个没有数据流动)。

    5.2K40
    领券