@Override
    public long setPeriodicTimer(final long periodMillis, final long initialDelayMillis,
            final IAsyncHandler<Long> periodicHandler) {
        // Make our own ID to cope with initial delay feature not being present in vert.x's timers.
        final long timerId = id++;

        // Do the initial delay, then map the next timer back to our ID.
        long vertxId = vertx.setTimer(initialDelayMillis, (Handler<Long>) tid -> {

            long newVertxId = vertx.setPeriodic(periodMillis,  (Handler<Long>) tid2 -> {
                periodicHandler.handle(timerId);
            });

            // Periodic delay - re-map to the new Vert.x timer ID, as original timer ID is now invalid.
            // Vert.x. is single-threaded per-verticle so this should be safe.
            timerMap.put(timerId, newVertxId);
        });

        timerMap.put(timerId, vertxId);
        return timerId;
    }
@ Override public long setPeriodicTimer ( final long periodMillis , final long initialDelayMillis , final IAsyncHandler < Long > periodicHandler ) { final long timerId = id ++ ; long vertxId = vertx . setTimer ( initialDelayMillis , ( Handler < Long > ) tid -> { long newVertxId = vertx . setPeriodic ( periodMillis , ( Handler < Long > ) tid2 -> { periodicHandler . handle ( timerId ) ; } ) ; timerMap . put ( timerId , newVertxId ) ; } ) ; timerMap . put ( timerId , vertxId ) ; return timerId ; }
@see io.apiman.gateway.engine.components.IPeriodicComponent#setPeriodicTimer(long, long,
io.apiman.gateway.engine.async.IAsyncHandler)