public SimpleActiveIdleMessageSourceAdvice(DynamicPeriodicTrigger trigger) { this.trigger = trigger; this.idlePollPeriod = trigger.getDuration(); this.activePollPeriod = trigger.getDuration(); }
@Override public Message<?> afterReceive(Message<?> result, MessageSource<?> source) { if (result == null) { this.trigger.setDuration(this.idlePollPeriod); } else { this.trigger.setDuration(this.activePollPeriod); } return result; }
final CountDownLatch latch = new CountDownLatch(5); final LinkedList<Long> triggerPeriods = new LinkedList<>(); final DynamicPeriodicTrigger trigger = new DynamicPeriodicTrigger(10); adapter.setSource(() -> { synchronized (triggerPeriods) { triggerPeriods.add(trigger.getDuration().toMillis());
@Bean public DynamicPeriodicTrigger periodicTrigger(TriggerProperties triggerProperties) { DynamicPeriodicTrigger trigger = new DynamicPeriodicTrigger(triggerProperties.getPeriod()); trigger.setInitialDelay(triggerProperties.getInitialDelay()); return trigger; }
private void backoff(String message) { if (trigger.getPeriod() > 0 && trigger.getPeriod() < Duration.ofMillis(maxPeriod).toMillis()) { Duration duration = Duration.ofMillis(trigger.getPeriod()); if (duration.multipliedBy(BACKOFF_MULTIPLE).compareTo(Duration.ofMillis(maxPeriod)) <= 0) { //If d >= 1, round to 1 seconds. if (duration.getSeconds() == 1) { duration = duration.ofSeconds(1); } duration = duration.multipliedBy(BACKOFF_MULTIPLE); } else { duration = Duration.ofMillis(maxPeriod); } if (trigger.getPeriod() < 1000) { log.info(String.format(message + " - increasing polling period to %d ms.", duration.toMillis())); } else { log.info(String.format(message + "- increasing polling period to %d seconds.", duration.getSeconds())); } trigger.setPeriod(duration.toMillis()); } else if (trigger.getPeriod() == Duration.ofMillis(maxPeriod).toMillis()){ log.info(message); } }
public LaunchRequestConsumer(PollableMessageSource input, DynamicPeriodicTrigger trigger, long maxPeriod, TaskOperations taskOperations) { Assert.notNull(input, "`input` cannot be null."); Assert.notNull(taskOperations, "`taskOperations` cannot be null."); this.input = input; this.trigger = trigger; this.initialPeriod = trigger.getPeriod(); this.maxPeriod = maxPeriod; this.taskOperations = taskOperations; this.taskScheduler = new ConcurrentTaskScheduler(); }
ScheduledFuture<?> consume() { return taskScheduler.schedule(() -> { if (!isRunning()) { return; } if (serverIsAcceptingNewTasks()) { if (paused.compareAndSet(true, false)) { log.info("Polling resumed"); } if (!input.poll(message -> { LaunchRequest request = (LaunchRequest) message.getPayload(); log.debug("Received a Task launch request - task name: " + request.getTaskName()); launchTask(request); }, new ParameterizedTypeReference<LaunchRequest>() { })) { backoff("No task launch request received"); } else { if (trigger.getPeriod() > initialPeriod) { trigger.setPeriod(initialPeriod); log.info(String.format("Polling period reset to %d ms.", trigger.getPeriod())); } } } else { paused.set(true); backoff("Polling paused"); } }, trigger); }
public SimpleActiveIdleMessageSourceAdvice(DynamicPeriodicTrigger trigger) { this.trigger = trigger; this.idlePollPeriod = trigger.getDuration(); this.activePollPeriod = trigger.getDuration(); }
@Override public Message<?> afterReceive(Message<?> result, MessageSource<?> source) { if (result == null) { this.trigger.setDuration(this.idlePollPeriod); } else { this.trigger.setDuration(this.activePollPeriod); } return result; }