30

Source.actorRefメソッドを使用してakka.stream.scaladsl.Sourceオブジェクトを作成しようとしています。フォームの何か

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 ベースの Source オブジェクトにデータを送信するにはどうすればよいですか?

ソースへのメッセージの送信は、次のような形式であると想定しました

//does not compile
weatherSource ! Weather("90210", 72.0, false)
weatherSource ! Weather("02139", 32.0, true)

ただし、演​​算子またはメソッドweatherSourceはありません。!tell

ドキュメントには、Source.actorRef の使用方法があまり説明されていません。

あなたのレビューと応答を事前に感謝します。

4

3 に答える 3

25

必要なもの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)

これはすべて実験的なものであり、変更される可能性があることに注意してください。

于 2015-06-11T18:17:44.837 に答える
8

@Noah が akka-streams の実験的な性質を指摘しているように、彼の答えは 1.0 リリースでは機能しない可能性があります。この例で与えられた例に従わなければなりませんでした:

implicit val materializer = ActorMaterializer()
val (actorRef: ActorRef, publisher: Publisher[TweetInfo]) = Source.actorRef[TweetInfo](1000, OverflowStrategy.fail).toMat(Sink.publisher)(Keep.both).run()
actorRef ! TweetInfo(...)
val source: Source[TweetInfo, Unit] = Source[TweetInfo](publisher)
于 2015-09-13T19:52:34.147 に答える