Class DistributedPriorityQueue<T>

java.lang.Object
org.apache.curator.framework.recipes.queue.DistributedPriorityQueue<T>
All Implemented Interfaces:
Closeable, AutoCloseable, QueueBase<T>

public class DistributedPriorityQueue<T> extends Object implements Closeable, QueueBase<T>

An implementation of the Distributed Priority Queue ZK recipe.

Internally, this uses a DistributedQueue. The only difference is that you specify a priority when putting into the queue.

IMPORTANT NOTE: The priority queue will perform far worse than a standard queue. Every time an item is added to/removed from the queue, every watcher must re-get all the nodes

  • Method Details

    • start

      public void start() throws Exception
      Start the queue. No other methods work until this is called
      Specified by:
      start in interface QueueBase<T>
      Throws:
      Exception - startup errors
    • close

      public void close() throws IOException
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Throws:
      IOException
    • put

      public void put(T item, int priority) throws Exception
      Add an item into the queue. Adding is done in the background - thus, this method will return quickly.

      NOTE: if an upper bound was set via QueueBuilder.maxItems, this method will block until there is available space in the queue.
      Parameters:
      item - item to add
      priority - item's priority - lower numbers come out of the queue first
      Throws:
      Exception - connection issues
    • put

      public boolean put(T item, int priority, int maxWait, TimeUnit unit) throws Exception
      Same as put(Object, int) but allows a maximum wait time if an upper bound was set via QueueBuilder.maxItems.
      Parameters:
      item - item to add
      priority - item's priority - lower numbers come out of the queue first
      maxWait - maximum wait
      unit - wait unit
      Returns:
      true if items was added, false if timed out
      Throws:
      Exception
    • putMulti

      public void putMulti(MultiItem<T> items, int priority) throws Exception
      Add a set of items with the same priority into the queue. Adding is done in the background - thus, this method will return quickly.

      NOTE: if an upper bound was set via QueueBuilder.maxItems, this method will block until there is available space in the queue.
      Parameters:
      items - items to add
      priority - item priority - lower numbers come out of the queue first
      Throws:
      Exception - connection issues
    • putMulti

      public boolean putMulti(MultiItem<T> items, int priority, int maxWait, TimeUnit unit) throws Exception
      Same as putMulti(MultiItem, int) but allows a maximum wait time if an upper bound was set via QueueBuilder.maxItems.
      Parameters:
      items - items to add
      priority - item priority - lower numbers come out of the queue first
      maxWait - maximum wait
      unit - wait unit
      Returns:
      true if items was added, false if timed out
      Throws:
      Exception
    • setErrorMode

      public void setErrorMode(ErrorMode newErrorMode)
      Description copied from interface: QueueBase
      Used when the queue is created with a QueueBuilder.lockPath(String). Determines the behavior when the queue consumer throws an exception
      Specified by:
      setErrorMode in interface QueueBase<T>
      Parameters:
      newErrorMode - the new error mode (the default is ErrorMode.REQUEUE
    • flushPuts

      public boolean flushPuts(long waitTime, TimeUnit timeUnit) throws InterruptedException
      Description copied from interface: QueueBase
      Wait until any pending puts are committed
      Specified by:
      flushPuts in interface QueueBase<T>
      Parameters:
      waitTime - max wait time
      timeUnit - time unit
      Returns:
      true if the flush was successful, false if it timed out first
      Throws:
      InterruptedException - if thread was interrupted
    • getPutListenerContainer

      public Listenable<QueuePutListener<T>> getPutListenerContainer()
      Return the manager for put listeners
      Specified by:
      getPutListenerContainer in interface QueueBase<T>
      Returns:
      put listener container
    • getLastMessageCount

      public int getLastMessageCount()
      Return the most recent message count from the queue. This is useful for debugging/information purposes only.
      Specified by:
      getLastMessageCount in interface QueueBase<T>
      Returns:
      count (can be 0)