2017-11-01 7 views
0

akkaストリームで私の最初のステップを得る。私はhereからコピーされ、これと同様のグラフを持っている:実行可能なグラフを停止する方法

val topHeadSink = Sink.head[Int] 
val bottomHeadSink = Sink.head[Int] 
val sharedDoubler = Flow[Int].map(_ * 2)  
val g = RunnableGraph.fromGraph(GraphDSL.create(topHeadSink, bottomHeadSink)((_, _)) { implicit builder => 
     (topHS, bottomHS) => 
     import GraphDSL.Implicits._ 
     val broadcast = builder.add(Broadcast[Int](2)) 
     Source.single(1) ~> broadcast.in  

    broadcast.out(0) ~> sharedDoubler ~> topHS.in 
    broadcast.out(1) ~> sharedDoubler ~> bottomHS.in 
    ClosedShape 
}) 

私はg.run() を使用してグラフを実行することができますが、私はそれをどのように停止することができますか? 私はどのような状況でそれを行う必要がありますか? このグラフはアクタ内に含まれています。アクターがクラッシュした場合、アクターの基礎となるグラフで何が起きるでしょうか?それはまた終わるでしょうか?

答えて

2

documentationに記載されているように、グラフの外側からグラフを完成させる方法はKillSwitchです。ドキュメントからコピーした例は、ソースが単一の要素であり、ストリームを実行すると非常に迅速に完了するため、この方法を説明するのには適していません。

val topSink = Sink.foreach(println) 
val bottomSink = Sink.foreach(println) 
val sharedDoubler = Flow[Int].map(_ * 2) 
val killSwitch = KillSwitches.single[Int] 

val g = RunnableGraph.fromGraph(GraphDSL.create(topSink, bottomSink, killSwitch)((_, _, _)) { 
    implicit builder => (topS, bottomS, switch) => 

    import GraphDSL.Implicits._ 

    val broadcast = builder.add(Broadcast[Int](2)) 
    Source.fromIterator(() => (1 to 1000000).iterator) ~> switch ~> broadcast.in 

    broadcast.out(0) ~> sharedDoubler ~> topS.in 
    broadcast.out(1) ~> sharedDoubler ~> bottomS.in 
    ClosedShape 
}) 

val res = g.run // res is of type (Future[Done], Future[Done], UniqueKillSwitch) 
Thread.sleep(1000) 
res._3.shutdown() 

ソースは今百万の要素で構成され、シンクは、今放送の要素を印刷する:のがより簡単にアクションでKillSwitchを参照してくださいにグラフを調整してみましょう。ストリームは1秒間実行されます。これは、ストリームを完了するためにshutdownを呼び出す前に、100万の要素すべてを解読するのに十分な時間ではありません。

アクター内でストリームを実行する場合、ストリームを実行するために作成される基になるアクター(またはアクター)のライフサイクルが、「囲む」アクターのライフサイクルと異なるかどうかは、マテリアライザーの作成方法によって異なります。詳細についてはdocumentationをお読みください。 Colin Breckの俳優とKillSwitchを使用してストリームのライフサイクルを管理する方法については、次のブログ記事も参考になります:http://blog.colinbreck.com/integrating-akka-streams-and-akka-actors-part-ii/

関連する問題