package org.buddycloud.channelserver.queue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import org.apache.log4j.Logger;
import org.buddycloud.channelserver.db.exception.NodeStoreException;
import org.xmpp.packet.Packet;
public abstract class QueueConsumer {
private static final Logger LOGGER = Logger.getLogger(QueueConsumer.class);
private ExecutorService executorService = Executors.newFixedThreadPool(5);
private final BlockingQueue<Packet> queue;
public QueueConsumer(BlockingQueue<Packet> queue) {
this.queue = queue;
}
public void start() {
executorService.submit(new Runnable() {
@Override
public void run() {
while (true) {
try {
Packet packet = queue.take();
consume(packet);
} catch (InterruptedException e) {
LOGGER.error(e);
} catch (NodeStoreException e) {
LOGGER.error(e);
}
}
}
});
}
protected abstract void consume(Packet p) throws NodeStoreException;
}