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

控制Mono重复任务的执行延迟

洪德寿
2023-03-14

我正试图实现一个轮询机制。我想根据一些条件增加或减少轮询间隔。我使用mono.repeat with delayElements来执行带有间隔的重复任务。但我无法根据一些条件找到修改延迟的方法。

Mono.just(1).
    repeat().
    delayElements(getPollingInterval()).
    takeUntil((s)->
      {

          if(checkForEndCriteria()){
              log.info("Critera to end reached);
              return true;
          }
          return false;
      }).
    log().
    subscribeOn(Schedulers.boundedElastic()).
    flatMapSequential(x -> {
        List<Event> eventList = getEvents(id, lastItemTimeStamp);;
        if (!eventList.isEmpty()) {
            //Recieving events now. So want to decrease the interval.
            return Flux.fromIterable(eventList);
        } else {
        //There are no events happening .So I would like
        //to increase the delay of repeat task by 1 sec

            return Flux.just(buildHeartBeatEvent());
        }
    }).
    onErrorResume(error -> {
        log.error("Error occurred", error);
        return Flux.error(error);
    });```

共有1个答案

郎成龙
2023-03-14

我使用流量实现了这一点。 generate() :

        Flux
            .<Duration>generate(sink -> {
                Date date = [NEXT_DATE];
                if (date != null) {
                    long millis = date.getTime() - System.currentTimeMillis();
                    sink.next(Duration.ofMillis(millis));
                }
                else {
                    sink.complete();
                }
            })
            .concatMap(duration ->
                    Mono.delay(duration)
                    ...
            )
            .repeat();

因此,每次回到generate()时,repeat()都可以查看某个状态,以获得下一次执行date

 类似资料:
  • 本文向大家介绍PHP定时任务延缓执行的实现,包括了PHP定时任务延缓执行的实现的使用技巧和注意事项,需要的朋友参考一下

  • 问题内容: 如何控制/限制提交给的任务?我已经发送了SMS消息,并且我需要控制执行程序,以便它最多只能以每秒N条消息的速度发送。 问题答案: 假设您为每个任务创建一条SMS消息,则可以使用ScheduleExecutorService。 将任务添加到队列中,它们将以每秒10个的速度处理。

  • 我正在使用sping-boot,我有这样一个用例,我想将列表的每个元素提交给执行器服务(线程池大小=4)。但是在每个必须处理的元素之间,我想要1秒钟的延迟。 Thread.sleep(1000)不工作,因为执行程序一睡觉就启动另一个线程。 编辑:这是我的process()方法,我在最后尝试使用sleep,但没有成功。

  • 我有一个Gradle项目,它有来自不同存储库的大量依赖项(,)。在成功执行任务并检查zip存档后,我发现在文件夹中复制了某些JAR: bcprov-jdk14-1.38。jar和bcprov-jdk14-138。罐子 bcmail-jdk14-1.38。jar和bcmail-jdk14-138。罐子 Jar元组具有相同的大小和内容。我想这是因为在不同的存储库中,这些依赖项具有不同的文件名。当执行任

  • 我在“React-Native Run-Android”上面临这个问题。我没有工作我的代码大约2个月。今天,我不得不做一些改变。但我不能在模拟器上运行。 Android/Build.Gradle

  • 我有一个包含许多JSON文件的文件夹,我希望使用JMeter将它们并行发送到Webservice。 我已经使用BeanShell采样器将文件收集到JMeter-variables中。然后我使用了一个ForEach控制器来执行HTTP请求(参见此线程)。 但问题是,当使用线程计数>1时,JSON文件会被多次处理。每个线程循环访问自己的JSON文件列表。 您知道多个线程如何共享ForEach控制器的输