Scala 是否可以基于另一个流在Akka流中生成流?

Scala 是否可以基于另一个流在Akka流中生成流?,scala,akka,akka-stream,Scala,Akka,Akka Stream,下面的BroadcastHub示例可以动态生成侦听同一制作人的工作人员。但这种繁殖必须在代码中显式完成。我想知道它是否可以被编码为流中事件的反应 在下面的示例中,我希望在spawns流中收到“spawn”消息后再生成2个worker。可能吗 package com.example import akka.actor.ActorSystem import akka.stream.ActorMaterializer import akka.stream.scaladsl.{BroadcastHub

下面的
BroadcastHub
示例可以动态生成侦听同一制作人的工作人员。但这种繁殖必须在代码中显式完成。我想知道它是否可以被编码为流中事件的反应

在下面的示例中,我希望在
spawns
流中收到“spawn”消息后再生成2个worker。可能吗

package com.example

import akka.actor.ActorSystem
import akka.stream.ActorMaterializer
import akka.stream.scaladsl.{BroadcastHub, Flow, Keep, Sink, Source}

import scala.concurrent.duration._

object TestApp extends App {
  implicit val system = ActorSystem("system")
  implicit val materializer = ActorMaterializer()

  val ticks = Source.tick(0.second, 1.second, "Tick").take(10)

  val broadcaster = ticks.toMat(BroadcastHub.sink(bufferSize = 16))(Keep.right).run()

  def prefixFlow(tag:String) = Flow[String].map(_ + s" from $tag").to(Sink.foreach(println))

  // Print out messages from the producer in two independent consumers
  broadcaster.runWith(prefixFlow("1"))
  broadcaster.runWith(prefixFlow("2"))

  // Is it possible to spawn more flows based on another stream?
  val spawns = Source.tick(2.second, 3.second, "Spawn").take(2)
  // spawns.foreach(broadcaster.runWith(prefixFlow("XXX"))
}

在您的具体示例中,您是否正在寻找一个简单的
地图

val spawns = Source
  .tick(2.second, 3.second, "Spawn")
  .take(2)
  .map(_ ⇒ broadcaster.runWith(prefixFlow("XXX")))
  .runWith(Sink.ignore)

在您的具体示例中,您是否正在寻找一个简单的
地图

val spawns = Source
  .tick(2.second, 3.second, "Spawn")
  .take(2)
  .map(_ ⇒ broadcaster.runWith(prefixFlow("XXX")))
  .runWith(Sink.ignore)

是的,有时候简单的解决方案才是重要的:)是的,有时候简单的解决方案才是重要的:)