当前位置: 首页 > 知识库问答 >
问题:

如何创建由通量完成触发的单声道

皮安顺
2023-03-14

我有一个类,它从通量源填充地图。我希望能够动态地更新thedata(),但我希望能够返回解析为当前或挂起数据的Mono。

基本上如果数据!=null和no in progress flux,返回Mono。仅返回(数据),否则返回最终将发出数据的单声道。

编辑:这是目前为止我能做的最好的了

    class SomeClass {
        private Mono<Map<String, Data>> theData;
        private final SomeFluxService someFluxService = new SomeFluxService();

        public SomeClass() {
            updateTheData();
        }

        public void updateTheData() {
            someFluxService.get()
                .collectMap(Data::getId, Function.identity())
                .subscribe(d -> this.theData = Mono.just(d));
        }

        public Mono<Map<String, Data>> getTheData() {
            return this.theData;
        }
    }

但是仍然存在一个问题,在第一次完成updateTheData()之前,getTheData()将返回null

帮助赞赏!


共有1个答案

石喜
2023-03-14

但是仍然存在一个问题,在第一次完成updateTheData()之前,getTheData()将返回null

这是因为您在订阅方法中使用消费者仅在发出数据时更新Mono。这是一种有点奇怪的方法,最好简单地cache()Mono然后立即将其分配给您的字段:

public void updateTheData() {
    theData = someFluxService.get()
            .collectMap(Data::getId, Function.identity())
            .cache();
}

更进一步,如果您的要求是每隔x秒更新一次数据,而不是按需更新,您可以将其传递给缓存函数并完全取消单独的方法:

public NewClass() {
    theData = someFluxService.get()
            .collectMap(Data::getId, Function.identity())
            .cache(Duration.ofMinutes(5));
}

public Mono<Map<String, Data>> getTheData() {
    return theData;
}
 类似资料:
  • 想象一下,我有一个CourseID对象列表(CourseID,Name)。让我们把这个列表称为'CourseNameList'。 当某人将请求发送到“ 然而,在发送结果之前,我还需要追加每个课程的价格。价格将从另一个微服务中检索,并返回Mono对象。 因此,用户将看到带有(ID、名称、价格)的课程列表。价格来源于其他服务。 控制器方法可能如下所示 我尝试了多种方法来返回Flux。但是,我不知道怎么

  • 有些方法返回。这是一个典型的模式,分多个层: 假设返回一个(它向数据库写入一些内容,发送一条消息等)。如果我只是用替换它,那么一切都按预期工作,否则就不是这样了。更具体地说,单声道从未完成,它贯穿所有处理,但在结束时错过了终止信号。所以这些东西实际上是写在数据库中的,消息实际上是发送的,等等。 为了证明没有终止是问题所在,这里有一个有效的黑客: null 我不能在应用程序之外用简单的单工作流复制这

  • 本文向大家介绍MySQL如何创建触发器,包括了MySQL如何创建触发器的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了MySQL创建触发器的具体代码,供大家参考,具体内容如下 先来个实例: 实例解析:   先创建触发器中待存储的表t_attendance   DELIMITER $   意思是告诉mysql下文执行语句以“$”结束,如果没有这句,下面语句会出错,mysql无法判断哪句

  • 我有两项要求: 有了这些,我想做以下工作: 当我调用它时,我得到以下输出: 当然,由于异步单声道映射,流在结果实际出现之前就关闭了。我怎样才能保持这个非阻塞,但也确保结果在调用上完成之前到达?

  • 我的REST控制器方法应该返回Mono,它必须由两个并行请求构建到另一个web服务,并处理它们的响应,其中一个请求返回Mono,另一个请求返回Flux 如何将单声道的响应与熔剂的响应结合起来进行处理? 显然,控制器是错误的,因为: 1)接受2个或更多的Mono,其中我有Mono和Flux-如何将它们组合起来? 2)也不确定: 是否正确? 有什么建议吗?

  • 我正在尝试获得另一个功能是提交按钮IE。class=“sucessclass”将在成功或完成时执行。下面是我的代码: