【问题标题】:How to stream from a capped collection with Spring data-mongodb-reactive如何使用 Spring data-mongodb-reactive 从有上限的集合中流式传输
【发布时间】:2018-02-26 14:34:14
【问题描述】:

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

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

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

提前谢谢你!

【问题讨论】:

  • 您正在创建电影并查询人员。这是什么?这是正确的吗?
  • 您是否启用了@EnableReactiveMongoRepositories 并且您确定将记录插入到mongo 中。因为我将文档手动添加到 mongo 中并且您的代码有效。
  • 持久性没有问题,一切正常。数据初始化程序将文档添加到上限集合。我可以请求所有文档 Flux ,即使我添加了这个注释(也可以通过查看类路径中的 dep 来自动启动处理它)我再次得到了相同的结果。
  • 是的。像桃子一样工作

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


【解决方案1】:

您的问题中有两个方面不符合您想要实现的目标:

  1. 您的代码包含阻塞位:block()。不要在启动期间或接收由反应式基础设施触发的事件时在初始化程序和事件处理程序中调用.block()。阻止是破坏任何功能并使您的应用程序失效的最简单方法。
  2. 浏览器不是使用页面视图消费流的理想工具。而是使用cURL

除此之外,Flux&lt;Person&gt;Flux&lt;Movie&gt; 之间似乎不匹配。

【讨论】:

  • 嗨,我订阅了它。我曾经在 chrome 上一一打印 Stream.generate() 事件流,做得很好,但我会使用 curl。再次为 Flux 抱歉,我对其进行了编辑。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2011-12-15
    • 2017-03-23
    • 1970-01-01
    • 1970-01-01
    • 2020-07-04
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多