2017-11-16 8 views
0

私は現在、個人的なプロジェクトのためにAkka Streams(Java)で作業しています。 SourceSource.actorRefまたはJavaのSource.queueに要素を送信する方法

アイデアはWebSocketを使用してコンテンツをユーザーのWebブラウザにプッシュすることです。私はAkka Streamsを使ってAkka HTTPのドキュメントに従って要求応答システムを作成しましたが、これは私がしたいことではありません。

Akka Streamsのドキュメントを見ると、Source.queueSource.actorRefがあることがわかりました。しかし、私はSourceに要素を入れる方法を理解していません。 Source.queueおよびSource.actorRefは、offerSource.queue)またはtellSource.actorRef)のメソッドを持たないSourceを返します。

私の質問は:どのように私は私のSourceに要素を送ることができるように、Source.actorRefまたはSource.queueで作成SourceためSourceQueueWithCompleteによって作成SourceためActorRefを得るのですか?

私は様々なAkkaのドキュメントを検索しましたが、それを行う方法は見つけられませんでした。インターネット上で見つけたコードの大部分はScalaで書かれていますが、これは同じ問題がないようです。

+0

可能な複製(https://stackoverflow.com [メソッドの呼び出しを介して、後の要素を受け取ることができるソースを作成する方法?]/questions/30964824/how-to-create-a-source-that-c​​an-receive-elements-later-via-a-method-call) –

答えて

0

Source.actorRefおよびSource.queueのそれぞれのアクターとキューは、これらのソースのmaterialized valuesであり、ストリームが実行されている場合にのみ取得できることを意味します。たとえば:

final ActorRef actor = 
    Source.actorRef(Integer.MAX_VALUE, OverflowStrategy.fail()) 
     .to(Sink.foreach(m -> System.out.println(m))) 
     .run(materializer); 

actor.tell("do something", ActorRef.noSender()); 

それはScalaでは何ら変わりません:の

implicit val materializer = ActorMaterializer() 

val actor = 
    Source.actorRef(Int.MaxValue, OverflowStrategy.fail) 
     .to(Sink.foreach(println)) 
     .run() 

actor ! "do something" 
関連する問題