java - Java Akka Actor 和流
问题描述
我从 https://doc.akka.io/docs/akka/current/index.html开始学习 akka
我有带有子演员的 ActorSystem 以及在父演员的层次结构中创建的所有子演员。例如:DeviceManager 是我的父演员,设备是子演员。
我想了解 akka 流在 actor 生命周期中从哪里开始。我们什么时候创建父actor或者流处理什么时候开始?
Akka 流如何与 Actor 生命周期相关联?
解决方案
Akka 流如何与 Actor 生命周期相关联?
Akka Streams 和 Typed Actor API 本质上是两个独立的 API,它们可以互操作并共享一些实现细节。您使用 Actor API 创建的任何 Actor 的生命周期完全独立于您正在运行的任何流。(反之亦然。)
我想了解akka流在actor生命周期中的启动位置,当我们创建父actor时,流进程何时开始?
如上所述,流是独立的。一个流(表示为 a RunnableGraph
)将在您启动时“开始” run
。(并不是说有几种方便的方法可以做同样的事情,例如Source.runWith
,Source.runForeach
等等。任何带有“run”的流方法都可能“启动”一个流。)这种“启动”称为物化,其中你的图(由源、流和汇组成),只是流的蓝图,应运而生。
开始学习的好地方是流快速入门。
我有带有子演员的 ActorSystem 以及在父演员的层次结构中创建的所有子演员。DeviceManager 是我的父演员,设备是子演员。
如果您想让两者互操作,请查看 Akka Streams 文档的Actor Interop部分。但是作为一个例子,如果你有一个 IoT 数据流,你正在 Akka Stream 中处理,并且在流的末尾你想将该流的元素发送到你的 DeviceManager actor,你可以使用ActorSink.actorRefWithBackpressure
. 您只需在流结束时使用该接收器,然后您的演员将收到正常的演员消息。(如果您不需要背压,则可以使用ActorSink.actorRef
,但如果您使用的是 Streams,则应使用背压。)
推荐阅读
- c# - TPL BufferBlock.ReceiveAsync 两次接收相同的项目
- c# - 我正在尝试为我的角色编写一个程序来跳跃。它出现了错误。我不太确定如何修复它们
- apache-spark - 如何在 pyspark 中读取 .hql 文件(运行 hive 查询)
- c - 指向仅存在于函数 C 中的变量
- c++ - extern "C": 什么需要,什么不需要?
- python-3.x - 使用 Laravel 执行 Python 脚本?
- r - R Plotly隐藏了X轴
- prolog - 如何用从 1 到 N 的 N 个元素填充列表,接受 Prolog 中的重复?
- python - 取数组中每 3 个点的平均值并将新值保存到新数组中
- regex - 使用 REGEX 在 notepad++ 中以 " 开头和结尾的多行换行,并在它们之间换行