Java Akka Actor 和流

Posted

技术标签:

【中文标题】Java Akka Actor 和流【英文标题】:Java Akka Actor and Streams 【发布时间】:2020-05-14 20:33:00 【问题描述】:

我开始学习 akka https://doc.akka.io/docs/akka/current/index.html

我有带有子演员的 ActorSystem 以及在父演员的层次结构中创建的所有子演员。 例如: DeviceManager 是我的父演员,设备是子演员。

我想了解 akka 流流在 Actor 生命周期中从哪里开始。 我们什么时候创建父actor或者流处理什么时候开始?

Akka 流如何与 Actor 生命周期相关联?

【问题讨论】:

【参考方案1】:

Akka 流如何与 Actor 生命周期相关联?

Akka Streams 和 Typed Actor API 本质上是两个独立的 API,它们可以互操作并共享一些实现细节。您使用 Actor API 创建的任何 Actor 的生命周期完全独立于您正在运行的任何流。 (反之亦然。)

我想了解 akka 流在 Actor 生命周期中从哪里开始,当我们创建父 Actor 时,流进程何时开始?

如上所述,流是独立的。当您run 时,一个流(表示为RunnableGraph)将“开始”。 (并不是说有几种方便的方法可以做同样的事情,例如Source.runWithSource.runForeach 等等。任何带有“run”的流方法都可能“启动”流。)这种“启动”被称为物化,其中你的图(由源、流和汇组成),它只是一个流的蓝图,被生成了。

streams quickstart 是一个开始学习的好地方。

我有带有子演员的 ActorSystem 和在父演员的层次结构中创建的所有子演员。 DeviceManager 是我的父演员,设备是子演员。

如果您想让两者互操作,请查看 Akka Streams 文档的 Actor Interop 部分。但是作为一个例子,如果你有一个物联网数据流,你正在 Akka Stream 中处理,并且在流的末尾你想将该流的元素发送到你的 DeviceManager 演员,你可以用 @ 987654327@。您只需在流结束时使用该接收器,然后您的演员将收到正常的演员消息。 (如果你不需要背压,你可以使用ActorSink.actorRef,但如果你使用的是Streams,你应该使用背压。)

【讨论】:

以上是关于Java Akka Actor 和流的主要内容,如果未能解决你的问题,请参考以下文章

Scala笔记整理:Actor和AKKA

Scala笔记整理:Actor和AKKA

akka actor模型和java thread模型各有啥优势

Akka系列:Akka中的Actor系统

Node.js 事件系统与 Akka 的 Actor 模式有何不同?

[scala] akka actor编程