2017-11-16 6 views
0

현재 개인 프로젝트 용으로 Akka Streams (Java)를 사용하고 있으며, 요소를 보내는 방법을 이해하는 데 어려움을 겪고 있습니다. Source.Source.actorRef 또는 Java의 Source.queue에 요소를 보내는 방법

아이디어는 WebSocket을 사용하여 사용자의 웹 브라우저에 콘텐츠를 푸시하는 것입니다. Akka Streams를 사용하여 Akka HTTP 설명서에 따라 요청 - 응답 시스템을 만들었지 만 이것이 내가 원하는 것은 아닙니다.

Akka Streams 설명서를 보면 Source.queueSource.actorRef이 있음을 확인했습니다. 그러나 나는 요소를 Source에 넣는 방법을 이해하지 못합니다. Source.queueSource.actorRefoffer (Source.queue의 경우) 또는 tell (Source.actorRef의 경우)이 아닌 Source을 반환합니다.

내 질문은 : 어떻게 내 Source에 요소를 보낼 수 있도록, Source.queue로 만든 Source에 대한 Source.actorRef에 의해 생성 된 Source 또는 SourceQueueWithComplete에 대한 ActorRef을받을 수 있나요?

다양한 Akka 문서를 검색했지만 그 방법은 없습니다. 그리고 인터넷에서 발견 한 대부분의 코드는 동일한 문제가없는 것으로 보이는 스칼라로 작성되었습니다.

+0

가능한 중복 (https://stackoverflow.com/questions/30964824/how-to-create-a-source-receive-elements-later-via-a-method-call) –

답변

0

Source.actorRefSource.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()); 

그것은 스칼라 다를 바 없습니다 : [? 메서드 호출을 통해 나중에 요소를받을 수있는 소스를 만드는 방법]

implicit val materializer = ActorMaterializer() 

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

actor ! "do something"