如何使用Spring data-mongodb-reactive从带帽的集合中流式传输

时间:2018-02-26 14:34:15

标签: java spring reactive-programming spring-data-mongodb project-reactor

我正在尝试使用这个有趣的存储库方法:

@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();
}

我也不例外, 我只是在浏览器中找到一个白页,没有新的文档流。我错过了一步吗?

提前谢谢!

2 个答案:

答案 0 :(得分:1)

您的问题中有两个方面不符合您的要求:

  1. 您的代码包含阻止位:block()。在启动期间或接收由响应式基础架构触发的事件时,请勿在初始化程序和事件处理程序中调用.block()。阻止是破坏任何功能的最简单方法,并使您的应用程序无法使用。
  2. 浏览器不是使用页面视图来使用流的理想工具。而是使用cURL
  3. 除此之外,您似乎在Flux<Person>Flux<Movie>之间存在不匹配。

答案 1 :(得分:0)

问题来自spring-security-webflux的SecurityWebFilterChain。我应该联系有关人员通知他们。 感谢您的支持!