Class RabbitMqQueue<ID,​DATA>

  • All Implemented Interfaces:
    IQueue<ID,​DATA>, AutoCloseable
    Direct Known Subclasses:
    BaseUniversalRabbitMqQueue

    public abstract class RabbitMqQueue<ID,​DATA>
    extends AbstractQueue<ID,​DATA>
    (Experimental) RabbitMQ implementation of IQueue.
    • Queue-size support: no
    • Ephemeral storage support: no
    Since:
    0.6.1
    Author:
    Thanh Ba Nguyen
    • Constructor Detail

      • RabbitMqQueue

        public RabbitMqQueue()
    • Method Detail

      • getUri

        public String getUri()
        RabbitMQ's connection URI (format amqp://username:password@host:port/virtualHost).
        Returns:
      • setUri

        public RabbitMqQueue<ID,​DATA> setUri​(String uri)
        RabbitMQ's connection URI (format amqp://username:password@host:port/virtualHost).
        Parameters:
        uri -
        Returns:
      • getConnectionFactory

        protected com.rabbitmq.client.ConnectionFactory getConnectionFactory()
        Getter for connectionFactory.
        Returns:
      • setConnectionFactory

        protected RabbitMqQueue<ID,​DATA> setConnectionFactory​(com.rabbitmq.client.ConnectionFactory connectionFactory,
                                                                    boolean setMyOwnConnectionFactory)
        Setter for connectionFactory.
        Parameters:
        connectionFactory -
        setMyOwnConnectionFactory -
        Returns:
        Since:
        0.7.1
      • setConnectionFactory

        public RabbitMqQueue<ID,​DATA> setConnectionFactory​(com.rabbitmq.client.ConnectionFactory connectionFactory)
        Setter for connectionFactory.
        Parameters:
        connectionFactory -
        Returns:
      • closeQuietly

        protected void closeQuietly​(com.rabbitmq.client.Connection connection)
      • closeQuietly

        protected void closeQuietly​(com.rabbitmq.client.Channel channel)
      • finish

        public void finish​(IQueueMessage<ID,​DATA> msg)
        Called when finish processing the message to cleanup ephemeral storage.

        Implementation flow:

        • Remove message from ephemeral storage.

        Note: ephemeral storage implementation is optional, depends on implementation.

      • take

        public IQueueMessage<ID,​DATA> take()
                                          throws QueueException.EphemeralIsFull
        Take a message out of queue.

        Implementation flow:

        • Read message from head of queue storage.
        • Write message to ephemeral storage.
        • Remove message from queue storage.

        Note: ephemeral storage implementation is optional, depends on implementation.

        Returns:
        Throws:
        QueueException.EphemeralIsFull - if the ephemeral storage is full
      • getOrphanMessages

        public Collection<IQueueMessage<ID,​DATA>> getOrphanMessages​(long thresholdTimestampMs)
        Get all orphan messages (messages that were left in ephemeral storage for a long time).
        Parameters:
        thresholdTimestampMs - message is orphan if message's timestampMillis + thresholdTimestampMs < now . Which means getOrphanMessages(10000) will return orphan messages that have stayed in ephemeral storage for more than 10000 milliseconds.
        Returns:
        null or empty collection if there is no orphan message
      • queueSize

        public int queueSize()
        Get number of items currently in queue storage.
        Returns:
        negative number if queue size can not be queried
      • ephemeralSize

        public int ephemeralSize()
        Get number of items currently in ephemeral storage.

        Note: ephemeral storage implementation is optional, depends on implementation.

        Returns:
        negative number if ephemeral size can not be queried