Server sent events 如何通过REST将传入数据转发到Quarkus中的SSE流

Server sent events 如何通过REST将传入数据转发到Quarkus中的SSE流,server-sent-events,quarkus,Server Sent Events,Quarkus,在我的设置中,我希望通过SSE通道(服务器发送的事件)转发某些状态更改。状态更改是通过调用REST端点启动的。因此,我需要将传入的状态更改转发到SSE流 在Quarkus中实现这一点的最佳/最简单方法是什么 我能想到的一个解决方案是使用EventBus()。SSE端点将订阅状态更改并将其推送到SSE通道。状态更改端点发布适当的事件 这是一个可行的解决方案吗?还有其他(更简单的)解决方案吗?在任何情况下,我都需要使用反应性的东西来实现这一点吗 非常感谢您的帮助 最简单的方法是使用rxjava作为流

在我的设置中,我希望通过SSE通道(服务器发送的事件)转发某些状态更改。状态更改是通过调用REST端点启动的。因此,我需要将传入的状态更改转发到SSE流

在Quarkus中实现这一点的最佳/最简单方法是什么

我能想到的一个解决方案是使用EventBus()。SSE端点将订阅状态更改并将其推送到SSE通道。状态更改端点发布适当的事件

这是一个可行的解决方案吗?还有其他(更简单的)解决方案吗?在任何情况下,我都需要使用反应性的东西来实现这一点吗


非常感谢您的帮助

最简单的方法是使用rxjava作为流提供者。首先,您需要添加rxjava依赖项。它可以来自quarkus中的反应依赖项,如kafka,也可以直接使用它(如果您不需要任何流媒体库):


io.reactivex.rxjava2
rxjava
2.2.19
下面是如何每秒发送随机双精度值的示例:

@GET
@路径(“/stream”)
@产生(MediaType.SERVER\u发送的\u事件)
@SSElementType(“文本/普通”)
公共发布服务器流(){
返回可流动的.interval(1,TimeUnit.SECONDS).map(勾选->新建Random().nextDouble());
}
我们创建了新的Flowable,它将每秒发射一次,并在每次滴答声中生成下一个随机双精度。研究如何创建Flowable的任何其他选项,例如
Flowable.fromFuture()
,以使其适应特定的代码逻辑


上面的p.S代码将在每次查询此端点时生成新的可流动的,我这样做是为了节省空间,在您的情况下,我假设您将有一个事件源,您可以构建一次,并在每次查询端点时使用相同的实例,谢谢您为我指明了正确的方向。 我选择了与科特林有关的叛变。我的代码现在如下所示:

数据类设备状态(变量状态:status=status.OFFLINE){
枚举类状态{脱机、连接、分析、维护}
}
@适用范围
类设备StatusService{
var deviceStatusProcessor:PublishProcessor=PublishProcessor.create()
var deviceStatusQueue:Flowable=Flowable.fromPublisher(deviceStatusProcessor)
趣味推送设备状态(设备状态:设备状态){
deviceStatusProcessor.onNext(deviceStatus)
}
fun getStream():多个{
返回Multi.createFrom().publisher(deviceStatusQueue)
}
}
@路径(“/deviceStatus”)
类DeviceStatusResource{
私有val记录器:LOGGER=LOGGER.getLogger(“DeviceStatusResource”)
@注入
@字段:默认值
lateinit var deviceStatusService:deviceStatusService
@职位
@使用(MediaType.APPLICATION_JSON)
乐趣状态(状态:DeviceStatus):响应{
LOGGER.info(“POST/deviceStatus”+状态.status);
deviceStatusService.pushDeviceStatus(状态)
返回Response.ok().build();
}
@得到
@路径(“/eventStream”)
@产生(MediaType.SERVER\u发送的\u事件)
@SSElementType(MediaType.APPLICATION_JSON)
乐趣流():多重{
return deviceStatusService.getStream()
}
}
作为最低限度的设置,服务可以直接使用deviceStatusProcessor作为发布服务器。但是,Flowable添加了缓冲。
欢迎对实施提出意见。

感谢您的指点。你能看一看吗?这是一种有效的方法吗?@robbit看起来不错