如何使用 Spring data-mongodb-reactive 从上限集合流式传输
How to stream from a capped collection with Spring data-mongodb-reactive
我正在尝试使用这个有趣的存储库方法:
@Tailable
Flux<Movie> findWithTailableCursorBy();
通过在控制器中公开它,
在上限集合中流式传输新保存的文档:
这是一个 DataAppInitializr :
@EventListener(ApplicationReadyEvent.class)
public void run(ApplicationReadyEvent evt) {
operations.collectionExists(Movie.class)
.flatMap(exists -> exists ? operations.dropCollection(Movie.class) : Mono.just(exists))
.then(operations.createCollection(Movie.class, CollectionOptions.empty()
.size(256 * 256)
.maxDocuments(10)
.capped()))
.thenMany(operations.insertAll(Flux.just("Jeyda", "Kaf Efrit").map(title-> new Movie(title)).collectList()))
.subscribe();
}
这是控制器方法:
@GetMapping(value = "/tail", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
Flux<Movie> allTail() {
return movieRepository.findWithTailableCursorBy();
}
我也不例外,
我只是在浏览器中看到一个白页,没有新文档流。我错过了一步吗?
提前致谢!
你的问题有两点不符合你的要求:
- 您的代码包含阻塞位:
block()
。在启动期间或接收由反应式基础设施触发的事件时,不要在初始化程序和事件处理程序中调用 .block()
。阻塞是破坏任何功能并使您的应用程序失效的最简单方法。
- 浏览器不是通过页面视图使用流的理想工具。而是使用
cURL
.
除此之外,您的 Flux<Person>
和 Flux<Movie>
似乎不匹配。
问题来自 spring-security-webflux 的 SecurityWebFilterChain。我应该联系有关人员通知他们。
感谢您的支持!
我正在尝试使用这个有趣的存储库方法:
@Tailable
Flux<Movie> findWithTailableCursorBy();
通过在控制器中公开它, 在上限集合中流式传输新保存的文档:
这是一个 DataAppInitializr :
@EventListener(ApplicationReadyEvent.class)
public void run(ApplicationReadyEvent evt) {
operations.collectionExists(Movie.class)
.flatMap(exists -> exists ? operations.dropCollection(Movie.class) : Mono.just(exists))
.then(operations.createCollection(Movie.class, CollectionOptions.empty()
.size(256 * 256)
.maxDocuments(10)
.capped()))
.thenMany(operations.insertAll(Flux.just("Jeyda", "Kaf Efrit").map(title-> new Movie(title)).collectList()))
.subscribe();
}
这是控制器方法:
@GetMapping(value = "/tail", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
Flux<Movie> allTail() {
return movieRepository.findWithTailableCursorBy();
}
我也不例外, 我只是在浏览器中看到一个白页,没有新文档流。我错过了一步吗?
提前致谢!
你的问题有两点不符合你的要求:
- 您的代码包含阻塞位:
block()
。在启动期间或接收由反应式基础设施触发的事件时,不要在初始化程序和事件处理程序中调用.block()
。阻塞是破坏任何功能并使您的应用程序失效的最简单方法。 - 浏览器不是通过页面视图使用流的理想工具。而是使用
cURL
.
除此之外,您的 Flux<Person>
和 Flux<Movie>
似乎不匹配。
问题来自 spring-security-webflux 的 SecurityWebFilterChain。我应该联系有关人员通知他们。 感谢您的支持!