Andrew,
Sorry for the confusion; I did not commit this code yet.
It's basically like this:
Code:
public class DelayedExecutor implements TaskExecutor {
private volatile long defaultDelay;
private volatile String delayHeaderName;
private final ScheduledExecutorService scheduler;
public DelayedExecutor(long defaultDelay) {
this(defaultDelay, null);
}
public DelayedExecutor(long defaultDelay, ScheduledExecutorService scheduler) {
this.defaultDelay = defaultDelay;
this.scheduler = (scheduler != null ? scheduler : Executors.newScheduledThreadPool(1));
}
public void setDefaultDelay(long defaultDelay) {
this.defaultDelay = defaultDelay;
}
public void execute(Runnable task) {
Long delay = null;
if (task instanceof MessageAwareRunnable && this.delayHeaderName != null) {
Message<?> message = ((MessageAwareRunnable) task).getMessage();
delay = message.getHeaders().get(this.delayHeaderName, Long.class);
}
if (delay == null) {
delay = this.defaultDelay;
}
this.scheduler.schedule(task, delay, TimeUnit.MILLISECONDS);
}
}