package ddth.dasp.framework.queue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; /** * In-process implementation of {@link ITextMessageQueue}. * * @author NBThanh <btnguyen2k@gmail.com> */ public class InProcessTextMessageQueue extends AbstractTextMessageQueue { private int capacity = -1; private BlockingQueue<String> queue; public void init() { queue = capacity > 0 ? new LinkedBlockingQueue<String>(capacity) : new LinkedBlockingQueue<String>(); } public void destroy() { if (queue != null) { queue.clear(); queue = null; } } public InProcessTextMessageQueue setCapacity(int capacity) { this.capacity = capacity; return this; } public int getCapacity() { return capacity; } /** * {@inheritDoc} */ @Override public String consumeMessage(String message) { return queue.poll(); } /** * {@inheritDoc} */ @Override public String consumeMessage(String message, long timeoutMillisecs) { try { return queue.poll(timeoutMillisecs, TimeUnit.MILLISECONDS); } catch (InterruptedException e) { return null; } } /** * {@inheritDoc} */ @Override public boolean produceMessage(String message) throws Exception { return queue.offer(message); } /** * {@inheritDoc} */ @Override public boolean produceMessage(String message, long timeoutMillisecs) throws Exception { return queue.offer(message, timeoutMillisecs, TimeUnit.MILLISECONDS); } }