SpringReactor如何缓存一次并将响应分发给所有其他用户

ztyzrc3y  于 2021-07-26  发布在  Java
关注(0)|答案(0)|浏览(172)

我的应用程序每10秒从一个网站上抓取一次货币数据。
我想缓存下面的示例货币数据:
报废货币(基础=欧元,目标=美元,汇率=1.2412)
并将数据从以下端点流式传输到所有其他用户:

@GetMapping(value = "/currency", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<ScrappedCurrency> getCurrencyValuesRealTime() {
    return Flux.interval(Duration.ofSeconds(10))
            .map(it -> webScrapper.scrap())
            .doOnNext(it -> log.info("[getCurrencyValues] Method is returned :: it={}", it));
}

当我为每个用户调用webscrapper.scrape()时,我不必要地为被刮网站创建了一个重载,因为据我所知,每个调用此端点的用户都在向被刮网站发送单独的请求。如果需要,我也可以分享刮板代码,所以请在评论要求。
与其这样做,我想调用这个scraper方法一次,并将响应数据分发给调用该端点的每个用户。如何实现这一点,或者在spring reactor中实现这一点是可能的?另外,我应该使用一些技术(如redis、kafka)来实现这个目标,还是只使用reactor就可以实现?
域澄清:没有任何内存问题,因为项目的数量将是有限的。
将有大约20个以下报废货币对象和相同的对象将不断更新。因此,内存中的对象数将保持不变,即20。
我们需要的是:从一个来源读取货币价值(即欧元/美元转换)。更新内存中的数据。然后,将数据发送给所有订户。当数据流传输到用户时,先前读取和更新的数据应该用于流传输。
不能向每个客户端的数据源发送其他请求。每10秒内只发送1个请求,并且该数据将以流式传输。读取数据必须10秒。但是,对用户没有任何限制。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题