访问由 Source.actorRef 创建的 akka 流源的底层 ActorRef [英] Accessing the underlying ActorRef of an akka stream Source created by Source.actorRef
问题描述
我正在尝试使用 Source.actorRef 方法来创建一个 akka.stream.scaladsl.Source 对象.形式的东西
I'm trying to use the Source.actorRef method to create an akka.stream.scaladsl.Source object. Something of the form
import akka.stream.OverflowStrategy.fail
import akka.stream.scaladsl.Source
case class Weather(zip : String, temp : Double, raining : Boolean)
val weatherSource = Source.actorRef[Weather](Int.MaxValue, fail)
val sunnySource = weatherSource.filter(!_.raining)
...
我的问题是:如何将数据发送到基于 ActorRef 的源对象?
我认为向源发送消息是某种形式
I assumed sending messages to the Source was something of the form
//does not compile
weatherSource ! Weather("90210", 72.0, false)
weatherSource ! Weather("02139", 32.0, true)
但是 weatherSource
没有 !
操作符或 tell
方法.
But weatherSource
doesn't have a !
operator or tell
method.
文档是没有过多描述如何使用 Source.actorRef,它只是说你可以......
The documentation isn't too descriptive on how to use Source.actorRef, it just says you can...
预先感谢您的评论和回复.
Thank you in advance for your review and response.
推荐答案
你需要一个Flow
:
import akka.stream.OverflowStrategy.fail
import akka.stream.scaladsl.Source
import akka.stream.scaladsl.{Sink, Flow}
case class Weather(zip : String, temp : Double, raining : Boolean)
val weatherSource = Source.actorRef[Weather](Int.MaxValue, fail)
val sunnySource = weatherSource.filter(!_.raining)
val ref = Flow[Weather]
.to(Sink.ignore)
.runWith(sunnySource)
ref ! Weather("02139", 32.0, true)
记住这都是实验性的,可能会改变!
Remember this is all experimental and may change!
这篇关于访问由 Source.actorRef 创建的 akka 流源的底层 ActorRef的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!