我目前正在与Akka Streams(Java)合作开展个人项目,我很难理解如何将元素发送到Source
。
我们的想法是使用WebSocket将内容推送到用户的Web浏览器中。我已经设法使用Akka Streams创建一个请求 - 响应系统,遵循Akka HTTP文档,但这不是我想要做的。
查看Akka Streams文档,我看到有Source.queue
和Source.actorRef
。但我不明白如何将一个元素放入Source
。 Source.queue
和Source.actorRef
返回Source
,其中没有方法offer
(针对Source.queue
)或tell
(针对{{1} }})。
我的问题是:如何获得由Source.actorRef
创建的ActorRef
Source
或Source.actorRef
创建的SourceQueueWithComplete
Source
Source.queue
,},以便能够将元素发送到我的Source
?
我搜索了各种Akka文档但发现没有方法可以做到这一点。我在互联网上找到的大多数代码都是用Scala编写的,它似乎没有同样的问题。
答案 0 :(得分:1)
来自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"