Class JmsMessageConsumer

java.lang.Object
org.apache.qpid.jms.JmsMessageConsumer
All Implemented Interfaces:
jakarta.jms.MessageConsumer, AutoCloseable, JmsMessageAvailableConsumer, JmsMessageDispatcher
Direct Known Subclasses:
JmsQueueReceiver, JmsSharedMessageConsumer, JmsTopicSubscriber

public class JmsMessageConsumer extends Object implements AutoCloseable, jakarta.jms.MessageConsumer, JmsMessageAvailableConsumer, JmsMessageDispatcher
implementation of a JMS Message Consumer
  • Field Details

    • session

      protected final JmsSession session
    • connection

      protected final JmsConnection connection
    • consumerInfo

      protected JmsConsumerInfo consumerInfo
    • acknowledgementMode

      protected final int acknowledgementMode
    • closed

      protected final AtomicBoolean closed
    • messageListener

      protected volatile jakarta.jms.MessageListener messageListener
    • availableListener

      protected volatile JmsMessageAvailableListener availableListener
    • messageQueue

      protected final MessageQueue messageQueue
    • lock

      protected final Lock lock
    • dispatchLock

      protected final ReentrantLock dispatchLock
    • failureCause

      protected final AtomicReference<Throwable> failureCause
    • deliveryTask

      protected final org.apache.qpid.jms.JmsMessageConsumer.MessageDeliverTask deliveryTask
    • tracer

      protected final JmsTracer tracer
    • address

      protected final String address
  • Constructor Details

    • JmsMessageConsumer

      protected JmsMessageConsumer(JmsConsumerId consumerId, JmsSession session, JmsDestination destination, String selector, boolean noLocal) throws jakarta.jms.JMSException
      Throws:
      jakarta.jms.JMSException
    • JmsMessageConsumer

      protected JmsMessageConsumer(JmsConsumerId consumerId, JmsSession session, JmsDestination destination, String name, String selector, boolean noLocal) throws jakarta.jms.JMSException
      Throws:
      jakarta.jms.JMSException
  • Method Details

    • init

      public void init() throws jakarta.jms.JMSException
      Throws:
      jakarta.jms.JMSException
    • close

      public void close() throws jakarta.jms.JMSException
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface jakarta.jms.MessageConsumer
      Throws:
      jakarta.jms.JMSException
    • doClose

      protected void doClose() throws jakarta.jms.JMSException
      Called to initiate shutdown of Producer resources and request that the remote peer remove the registered producer.
      Throws:
      jakarta.jms.JMSException - if an error occurs during the consumer close operation.
    • shutdown

      protected void shutdown() throws jakarta.jms.JMSException
      Called to release all producer resources without requiring a destroy request to be sent to the remote peer. This is most commonly needed when the parent Session is closing.
      Throws:
      jakarta.jms.JMSException - if an error occurs during shutdown.
    • shutdown

      protected void shutdown(Throwable cause) throws jakarta.jms.JMSException
      Throws:
      jakarta.jms.JMSException
    • receive

      public jakarta.jms.Message receive() throws jakarta.jms.JMSException
      Specified by:
      receive in interface jakarta.jms.MessageConsumer
      Throws:
      jakarta.jms.JMSException
    • receive

      public jakarta.jms.Message receive(long timeout) throws jakarta.jms.JMSException
      Specified by:
      receive in interface jakarta.jms.MessageConsumer
      Throws:
      jakarta.jms.JMSException
    • receiveNoWait

      public jakarta.jms.Message receiveNoWait() throws jakarta.jms.JMSException
      Specified by:
      receiveNoWait in interface jakarta.jms.MessageConsumer
      Throws:
      jakarta.jms.JMSException
    • receiveBody

      public <T> T receiveBody(Class<T> desired, long timeout) throws jakarta.jms.JMSException
      Reads the next available message for this consumer and returns the body of that message if the type requested matches that of the message. The amount of time this method blocks is based on the timeout value. timeout < 0 then it blocks until a message is received. timeout = 0 then it returns the body immediately or null if none available. timeout > 0 then it blocks up to timeout amount of time.
      Parameters:
      desired - The type to assign the body of the message to for return.
      timeout - The time to wait for an incoming message before this method returns null.
      Returns:
      the assigned body of the next available message or null if the consumer is closed or the specified timeout elapses.
      Throws:
      jakarta.jms.MessageFormatException - if the message body cannot be assigned to the requested type.
      jakarta.jms.JMSException - if an error occurs while receiving the next message.
    • checkClosed

      protected void checkClosed() throws jakarta.jms.IllegalStateException
      Throws:
      jakarta.jms.IllegalStateException
    • onInboundMessage

      public void onInboundMessage(JmsInboundMessageDispatch envelope)
      Called from the session when a new Message has been dispatched to this Consumer from the connection.
      Specified by:
      onInboundMessage in interface JmsMessageDispatcher
      Parameters:
      envelope - the newly arrived message.
    • start

      public void start()
    • stop

      public void stop()
    • getConsumerId

      public JmsConsumerId getConsumerId()
      Returns:
      the id
    • getDestination

      public JmsDestination getDestination()
      Returns:
      the Destination
    • getMessageListener

      public jakarta.jms.MessageListener getMessageListener() throws jakarta.jms.JMSException
      Specified by:
      getMessageListener in interface jakarta.jms.MessageConsumer
      Throws:
      jakarta.jms.JMSException
    • setMessageListener

      public void setMessageListener(jakarta.jms.MessageListener listener) throws jakarta.jms.JMSException
      Specified by:
      setMessageListener in interface jakarta.jms.MessageConsumer
      Throws:
      jakarta.jms.JMSException
    • getMessageSelector

      public String getMessageSelector() throws jakarta.jms.JMSException
      Specified by:
      getMessageSelector in interface jakarta.jms.MessageConsumer
      Throws:
      jakarta.jms.JMSException
    • getPrefetchSize

      public int getPrefetchSize()
      Gets the configured prefetch size for this consumer.
      Returns:
      the prefetch size configuration for this consumer.
    • checkMessageListener

      protected void checkMessageListener() throws jakarta.jms.JMSException
      Throws:
      jakarta.jms.JMSException
    • getMessageQueueSize

      protected int getMessageQueueSize()
    • isNoLocal

      protected boolean isNoLocal()
    • isDurableSubscription

      public boolean isDurableSubscription()
    • isSharedSubscription

      public boolean isSharedSubscription()
    • isBrowser

      public boolean isBrowser()
    • isPullConsumer

      public boolean isPullConsumer()
    • setAvailableListener

      public void setAvailableListener(JmsMessageAvailableListener availableListener)
      Description copied from interface: JmsMessageAvailableConsumer
      Sets the listener used to notify synchronous consumers that there is a message available so that the MessageConsumer.receiveNoWait() can be called.
      Specified by:
      setAvailableListener in interface JmsMessageAvailableConsumer
      Parameters:
      availableListener - the JmsMessageAvailableListener instance to signal.
    • getAvailableListener

      public JmsMessageAvailableListener getAvailableListener()
      Description copied from interface: JmsMessageAvailableConsumer
      Gets the listener used to notify synchronous consumers that there is a message available so that the MessageConsumer.receiveNoWait() can be called.
      Specified by:
      getAvailableListener in interface JmsMessageAvailableConsumer
      Returns:
      the currently configured message available listener instance.
    • onConnectionInterrupted

      protected void onConnectionInterrupted()
    • onConnectionRecovery

      protected void onConnectionRecovery(Provider provider) throws Exception
      Throws:
      Exception
    • onConnectionRecovered

      protected void onConnectionRecovered(Provider provider) throws Exception
      Throws:
      Exception
    • onConnectionRestored

      protected void onConnectionRestored()
    • performPullIfRequired

      protected boolean performPullIfRequired(long timeout, boolean treatAsPullConsumer) throws jakarta.jms.JMSException
      Triggers a pull request from the connected Provider with the given timeout value if the consumer is a pull consumer or requested to be treated as one, and the local queue is still running, and is currently empty.

      The timeout value can be one of:
      < 0 to indicate that the request should never time out.
      = 0 to indicate that the request should expire immediately if no message.
      > 0 to indicate that the request should expire after the given time in milliseconds.

      Parameters:
      timeout - The amount of time the pull request should remain valid.
      treatAsPullConsumer - Treat the consumer as if it were a pull consumer, even if it isn't.
      Returns:
      true if a pull was performed, false if it was not.
      Throws:
      jakarta.jms.JMSException