我正在使用Spring Webflux,Spring Data和Project Reactor进行非阻塞I / O(Spring Boot 2.0.0.M7)。
我的目标是创建类似股票行情的API,以允许客户端根据某些条件从端点请求所有资源,并接收在初始请求之后创建的新资源。 Reactive MongoDB是后备存储。基本的HandlerFunction
实现如下所示。
Mono<ServerResponse> getFoos(ServerRequest request) {
ok().contentType(TEXT_EVENT_STREAM)
.body(fooRepository.findAll(), Foo)
}
显然,这只返回当前可用的所有Foos
,然后Publisher
关闭连接,并且没有新的Foos
被发送到客户端。我的问题是用什么模式来添加一个可以接受新条目的无限流?
Publisher Bean
,我写了新的Foos
,因为他们被创建onComplete
的Repository
(带有一些标准来过滤重复的条目)repeat
并让客户端过滤重复项如果您相应地配置MongoDB集合(必须加上限制),您可以使用tailable游标来实现您想要的,只需在存储库中添加@Tailable
注释即可。见Spring Data MongoDB reference documentation about infinite streams。