如何将元素发送到Java

时间:2017-11-16 10:44:02

标签: java akka akka-stream akka-http

我目前正在与Akka Streams(Java)合作开展个人项目,我很难理解如何将元素发送到Source

我们的想法是使用WebSocket将内容推送到用户的Web浏览器中。我已经设法使用Akka Streams创建一个请求 - 响应系统,遵循Akka HTTP文档,但这不是我想要做的。

查看Akka Streams文档,我看到有Source.queueSource.actorRef。但我不明白如何将一个元素放入SourceSource.queueSource.actorRef返回Source,其中没有方法offer(针对Source.queue)或tell(针对{{1} }})。

我的问题是:如何获得由Source.actorRef创建的ActorRef SourceSource.actorRef创建的SourceQueueWithComplete Source Source.queue ,},以便能够将元素发送到我的Source

我搜索了各种Akka文档但发现没有方法可以做到这一点。我在互联网上找到的大多数代码都是用Scala编写的,它似乎没有同样的问题。

1 个答案:

答案 0 :(得分:1)

来自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());

Scala没有什么不同:

implicit val materializer = ActorMaterializer()

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

actor ! "do something"