如何从Akka中的EventStream创建服务器端事件?

如何从Akka中的EventStream创建服务器端事件?,akka,akka-stream,akka-http,Akka,Akka Stream,Akka Http,我尝试了:EventStream->Source->Akka HTTP(SSE) 在我看来,这是行不通的,因为源代码将由Akka HTTPcomplete(source,…) 要将消息从EventStream发送到具体化的源,我需要ActorRef(有办法获得ActorRef吗?) 我在GitHub上找到了一个使用ActorPublisher的解决方案: 但是由于ActorPublisher是一个内部API,我仍然希望有一个干净的解决方案。您可以使用它创建一个源代码,将事件流元素转换为实例,

我尝试了:EventStream->Source->Akka HTTP(SSE)

在我看来,这是行不通的,因为源代码将由Akka HTTP
complete(source,…)
要将消息从EventStream发送到具体化的源,我需要ActorRef(有办法获得ActorRef吗?)


我在GitHub上找到了一个使用ActorPublisher的解决方案:

但是由于ActorPublisher是一个内部API,我仍然希望有一个干净的解决方案。

您可以使用它创建一个
源代码,将事件流元素转换为实例,并以如下方式:

val(sseActor,sseSource)=
Source.actorRef[EventStreamMessageOrWhatever](10,akka.stream.OverflowStrategy.dropTail)
.map(s=>/*将事件流元素转换为ServerSideEvent*/)
.keepAlive(1.2秒,()=>ServerSentEvent.heartbeat)
.toMat(BroadcastHub.sink[ServerSentEvent])(Keep.both)
.run()
如果存在下游需求,则发送到物化
ActorRef
的消息(即事件流元素)将在下游发出。如果没有下游需求,则使用指定的溢出策略将消息缓冲到一定数量(在本例中,缓冲区大小为10)

然后,您可以将具体化的参与者订阅到
EventStream

eventStream.subscribe(sseActor,…)
具体化的
源代码
可在您的路径中使用:

路径(“sse”){ 得到{ 完成(来源) } }
请注意,这种方法没有反压力。

您可以使用创建将事件流元素转换为实例的
源代码,并以如下方式:

val(sseActor,sseSource)=
Source.actorRef[EventStreamMessageOrWhatever](10,akka.stream.OverflowStrategy.dropTail)
.map(s=>/*将事件流元素转换为ServerSideEvent*/)
.keepAlive(1.2秒,()=>ServerSentEvent.heartbeat)
.toMat(BroadcastHub.sink[ServerSentEvent])(Keep.both)
.run()
如果存在下游需求,则发送到物化
ActorRef
的消息(即事件流元素)将在下游发出。如果没有下游需求,则使用指定的溢出策略将消息缓冲到一定数量(在本例中,缓冲区大小为10)

然后,您可以将具体化的参与者订阅到
EventStream

eventStream.subscribe(sseActor,…)
具体化的
源代码
可在您的路径中使用:

路径(“sse”){ 得到{ 完成(来源) } }

请注意,这种方法没有反压力。

开发人员如何知道
EventStream
中的事件流何时结束?开发人员如何知道
EventStream
中的事件流何时结束?