keren omero
keren omero

Reputation: 13

Vertx timer change delay

Need helps with timer:) I need to create a repated timer in vertx, with a delay that changes.

The parameter delay value - is saved in my DB. let's say we start with 10 seconds.

when I run the handler every 10 seconds I am checking my DataBase.

If the value - delay changes, I want to update the delay timer

Do you know how can I write a timer with changing delay?

public void initTimer() {

    long delayFromDB = getDelayFromDB(); 
    setPeriodicTimer(delayFromDB); 

}

public long setPeriodicTimer(long delayFromDB) {

long timerID = vertx.setPeriodic(delayFromDB, new Handler<Long>() {
  @Override
  public void handle(Long timerID) {
    long currDelayFromDB = getDelayFromDB(); 
    doSomeOperation();
    newDelayFromDB = getDelayFromDB(); 

    if(currDelayFromDB != newDelayFromDB ) {
      restartTimerWithNewDelay(newDelayFromDB , timerID);
    }
  }
});
return timerID;

}

public void restartRefreshTimerWithNewTtl(long newDelayFromDB , Long timerID) {

  //cancel last timer: timerID and  restart timer with the new delay    
  vertx.cancelTimer(timerID);
  setPeriodicTimer(newDelayFromDB );

}

And is it ok to cancel timer and create another one right after, from the handle of the timer that will be canceled now. like here ? (in this function restartRefreshTimerWithNewTtl)

Upvotes: 0

Views: 924

Answers (1)

Clement
Clement

Reputation: 3192

Your approach works. Another approach would be to not use setPeriodic but just a regular timer and re-start a timer every time. So instead of :

if(currDelayFromDB != newDelayFromDB ) {
      restartTimerWithNewDelay(newDelayFromDB , timerID);
}

You would do something like:

vertx.setTimer(newDelayFromDB , task);

Upvotes: 2

Related Questions