package io.fathom.cloud.mq;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.fathomdb.TimeSpan;
public class JobRunner implements Runnable {
private static final Logger log = LoggerFactory.getLogger(JobRunner.class);
final MessageQueueReader queue;
final RequestExecutor executor;
public JobRunner(MessageQueueReader queue, RequestExecutor executor) {
this.queue = queue;
this.executor = executor;
}
@Override
public void run() {
while (true) {
try {
byte[] request = queue.poll();
// TODO: Run in parallel??
if (request != null) {
try {
executor.execute(request);
continue;
} catch (Throwable t) {
log.error("Error while running queued message", t);
}
}
} catch (Throwable e) {
log.warn("Unexpected exception in job-runner", e);
}
TimeSpan.FIVE_SECONDS.doSafeSleep();
}
}
public Thread start() {
Thread thread = new Thread(this);
thread.start();
return thread;
}
}