spring webflux - 如何以1秒的间隔从数据库中获取所有数据?

Posted

技术标签:

【中文标题】spring webflux - 如何以1秒的间隔从数据库中获取所有数据?【英文标题】:spring webflux - how to get all data from the database with an interval of 1 second? 【发布时间】:2019-12-25 16:30:25 【问题描述】:

请告诉我。

我的 MongoDB 中有 4 条记录。好的。 我正在为当前任务使用 Reactive Spring。

如果我收到此请求,我将从我的数据库中获取所有数据(4 条记录):

@GetMapping(value = "/stream/positions", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<Position> streamAllPositions() 
    return positionRepository.findAll();

我想指定 1 秒的时间间隔,我将从数据库中接收所有记录(4 秒内有 4 条记录)。 那些。我将收到来自数据库的第一条记录,一秒钟后我将收到来自数据库的第二条记录,一秒钟后我将收到来自数据库的第三条记录,再过一秒钟我将收到来自数据库的第四条记录。

我尝试根据每秒生成一次的默认值来执行此操作。它工作正常。

// Get default value every 1 second
@GetMapping(value = "/stream/persons", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<Person> emitPersons() 
    return Flux.interval(Duration.ofSeconds(1))
            .map(val -> new Person( 1, Sex.MAN, "default", "default", 30, "default"));

但我需要从我的数据库中获取真实数据(不是一次全部,每条记录分别以 1 秒的间隔)。

告诉我,我该如何实现? 谢谢。

【问题讨论】:

【参考方案1】:

您可以使用delayElements 运算符:

@GetMapping(value = "/stream/positions", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<Position> streamAllPositions() 
    return positionRepository.findAll().delayElements(Duration.ofSeconds(1));

【讨论】:

你能告诉我研究所有有趣方法的文章或链接吗?谢谢 很高兴,我能帮上忙 :) 下面是关于可用运算符的有用总结:projectreactor.io/docs/core/release/reference/#which-operator 最终来源是实际的 API 文档:projectreactor.io/docs/core/release/api/reactor/core/publisher/… @MartinTarjányi delayElements(Duration.ofSeconds(1) 仅延迟输出 1 秒,但不会每 1 秒返回响应【参考方案2】:

尝试在检索期间添加超时。

参考:https://projectreactor.io/docs/core/release/reference/

【讨论】:

以上是关于spring webflux - 如何以1秒的间隔从数据库中获取所有数据?的主要内容,如果未能解决你的问题,请参考以下文章

我的应用程序的背景有一系列图像。如何让它们以 1 秒的间隔自动更改?

如何使用Objective C以2秒的间隔一张一张地自动滚动图像?

如何以 10 秒的间隔在 mvc razor 页面中使用 jQuery 调用方法并将输出附加到 html

在 Spring Boot 和 Spring WebFlux (Netty) 中指定服务器请求超时

如何使用 spring webflux 读取请求正文

Graphite 在不到一秒的时间间隔内聚合数据