org.apache.activemq
Class ActiveMQMessageConsumer

java.lang.Object
  extended by org.apache.activemq.ActiveMQMessageConsumer
All Implemented Interfaces:
MessageConsumer, ActiveMQDispatcher, StatsCapable, MessageAvailableConsumer
Direct Known Subclasses:
ActiveMQQueueReceiver, ActiveMQTopicSubscriber

public class ActiveMQMessageConsumer
extends Object
implements MessageAvailableConsumer, StatsCapable, ActiveMQDispatcher

A client uses a MessageConsumer object to receive messages from a destination. A MessageConsumer object is created by passing a Destination object to a message-consumer creation method supplied by a session.

MessageConsumer is the parent interface for all message consumers.

A message consumer can be created with a message selector. A message selector allows the client to restrict the messages delivered to the message consumer to those that match the selector.

A client may either synchronously receive a message consumer's messages or have the consumer asynchronously deliver them as they arrive.

For synchronous receipt, a client can request the next message from a message consumer using one of its receive methods. There are several variations of receive that allow a client to poll or wait for the next message.

For asynchronous delivery, a client can register a MessageListener object with a message consumer. As messages arrive at the message consumer, it delivers them by calling the MessageListener's onMessage method.

It is a client programming error for a MessageListener to throw an exception.

See Also:
MessageConsumer, QueueReceiver, TopicSubscriber, Session

Field Summary
protected  LinkedList<MessageDispatch> deliveredMessages
           
protected  ConsumerInfo info
           
protected  ActiveMQSession session
           
protected  MessageDispatchChannel unconsumedMessages
           
 
Constructor Summary
ActiveMQMessageConsumer(ActiveMQSession session, ConsumerId consumerId, ActiveMQDestination dest, String name, String selector, int prefetch, int maximumPendingMessageCount, boolean noLocal, boolean browser, boolean dispatchAsync, MessageListener messageListener)
          Create a MessageConsumer
 
Method Summary
 void acknowledge()
          Acknowledge all the messages that have been delivered to the client up to this point.
protected  void checkClosed()
           
protected  void checkMessageListener()
           
 void close()
          Closes the message consumer.
 void commit()
           
 void dispatch(MessageDispatch md)
           
 void dispose()
           
 MessageAvailableListener getAvailableListener()
          Gets the listener used to notify synchronous consumers that there is a message available so that the MessageConsumer.receiveNoWait() can be called.
 ConsumerId getConsumerId()
           
 String getConsumerName()
           
 JMSConsumerStatsImpl getConsumerStats()
           
protected  ActiveMQDestination getDestination()
           
 IOException getFailureError()
           
 long getLastDeliveredSequenceId()
           
 MessageListener getMessageListener()
          Gets the message consumer's MessageListener.
 String getMessageSelector()
          Gets this message consumer's message selector expression.
 int getMessageSize()
           
 long getOptimizedAckScheduledAckInterval()
           
 int getPrefetchNumber()
           
 RedeliveryPolicy getRedeliveryPolicy()
           
 StatsImpl getStats()
           
 MessageTransformer getTransformer()
           
 boolean hasMessageListener()
           
protected  boolean isBrowser()
          Retrieve is a browser
 boolean isDurableSubscriber()
           
 boolean isInUse(ActiveMQTempDestination destination)
           
protected  boolean isNoLocal()
           
 boolean iterate()
          Delivers a message to the message listener.
 Message receive()
          Receives the next message produced for this message consumer.
 Message receive(long timeout)
          Receives the next message that arrives within the specified timeout interval.
 Message receiveNoWait()
          Receives the next message if one is immediately available.
 void rollback()
           
protected  void sendPullCommand(long timeout)
          If we have a zero prefetch specified then send a pull command to the broker to pull a message we are about to receive
 void setAvailableListener(MessageAvailableListener availableListener)
          Sets the listener used to notify synchronous consumers that there is a message available so that the MessageConsumer.receiveNoWait() can be called.
 void setFailureError(IOException failureError)
           
 void setMessageListener(MessageListener listener)
          Sets the message consumer's MessageListener.
protected  void setOptimizeAcknowledge(boolean value)
           
 void setOptimizedAckScheduledAckInterval(long optimizedAckScheduledAckInterval)
           
protected  void setPrefetchSize(int prefetch)
           
 void setRedeliveryPolicy(RedeliveryPolicy redeliveryPolicy)
          Sets the redelivery policy used when messages are redelivered
 void setTransformer(MessageTransformer transformer)
          Sets the transformer used to transform messages before they are sent on to the JMS bus
 void start()
           
 void stop()
           
 String toString()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

session

protected final ActiveMQSession session

info

protected final ConsumerInfo info

unconsumedMessages

protected final MessageDispatchChannel unconsumedMessages

deliveredMessages

protected final LinkedList<MessageDispatch> deliveredMessages
Constructor Detail

ActiveMQMessageConsumer

public ActiveMQMessageConsumer(ActiveMQSession session,
                               ConsumerId consumerId,
                               ActiveMQDestination dest,
                               String name,
                               String selector,
                               int prefetch,
                               int maximumPendingMessageCount,
                               boolean noLocal,
                               boolean browser,
                               boolean dispatchAsync,
                               MessageListener messageListener)
                        throws JMSException
Create a MessageConsumer

Parameters:
session -
dest -
name -
selector -
prefetch -
maximumPendingMessageCount -
noLocal -
browser -
dispatchAsync -
messageListener -
Throws:
JMSException
Method Detail

getStats

public StatsImpl getStats()
Specified by:
getStats in interface StatsCapable
Returns:
the Stats for this object

getConsumerStats

public JMSConsumerStatsImpl getConsumerStats()

getRedeliveryPolicy

public RedeliveryPolicy getRedeliveryPolicy()

setRedeliveryPolicy

public void setRedeliveryPolicy(RedeliveryPolicy redeliveryPolicy)
Sets the redelivery policy used when messages are redelivered


getTransformer

public MessageTransformer getTransformer()

setTransformer

public void setTransformer(MessageTransformer transformer)
Sets the transformer used to transform messages before they are sent on to the JMS bus


getConsumerId

public ConsumerId getConsumerId()
Returns:
Returns the value.

getConsumerName

public String getConsumerName()
Returns:
the consumer name - used for durable consumers

isNoLocal

protected boolean isNoLocal()
Returns:
true if this consumer does not accept locally produced messages

isBrowser

protected boolean isBrowser()
Retrieve is a browser

Returns:
true if a browser

getDestination

protected ActiveMQDestination getDestination()
Returns:
ActiveMQDestination

getPrefetchNumber

public int getPrefetchNumber()
Returns:
Returns the prefetchNumber.

isDurableSubscriber

public boolean isDurableSubscriber()
Returns:
true if this is a durable topic subscriber

getMessageSelector

public String getMessageSelector()
                          throws JMSException
Gets this message consumer's message selector expression.

Specified by:
getMessageSelector in interface MessageConsumer
Returns:
this message consumer's message selector, or null if no message selector exists for the message consumer (that is, if the message selector was not set or was set to null or the empty string)
Throws:
JMSException - if the JMS provider fails to receive the next message due to some internal error.

getMessageListener

public MessageListener getMessageListener()
                                   throws JMSException
Gets the message consumer's MessageListener.

Specified by:
getMessageListener in interface MessageConsumer
Returns:
the listener for the message consumer, or null if no listener is set
Throws:
JMSException - if the JMS provider fails to get the message listener due to some internal error.
See Also:
MessageConsumer.setMessageListener(javax.jms.MessageListener)

setMessageListener

public void setMessageListener(MessageListener listener)
                        throws JMSException
Sets the message consumer's MessageListener.

Setting the message listener to null is the equivalent of unsetting the message listener for the message consumer.

The effect of calling MessageConsumer.setMessageListener while messages are being consumed by an existing listener or the consumer is being used to consume messages synchronously is undefined.

Specified by:
setMessageListener in interface MessageConsumer
Parameters:
listener - the listener to which the messages are to be delivered
Throws:
JMSException - if the JMS provider fails to receive the next message due to some internal error.
See Also:
MessageConsumer.getMessageListener()

getAvailableListener

public MessageAvailableListener getAvailableListener()
Description copied from interface: MessageAvailableConsumer
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 MessageAvailableConsumer

setAvailableListener

public void setAvailableListener(MessageAvailableListener availableListener)
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 MessageAvailableConsumer

receive

public Message receive()
                throws JMSException
Receives the next message produced for this message consumer.

This call blocks indefinitely until a message is produced or until this message consumer is closed.

If this receive is done within a transaction, the consumer retains the message until the transaction commits.

Specified by:
receive in interface MessageConsumer
Returns:
the next message produced for this message consumer, or null if this message consumer is concurrently closed
Throws:
JMSException

receive

public Message receive(long timeout)
                throws JMSException
Receives the next message that arrives within the specified timeout interval.

This call blocks until a message arrives, the timeout expires, or this message consumer is closed. A timeout of zero never expires, and the call blocks indefinitely.

Specified by:
receive in interface MessageConsumer
Parameters:
timeout - the timeout value (in milliseconds), a time out of zero never expires.
Returns:
the next message produced for this message consumer, or null if the timeout expires or this message consumer is concurrently closed
Throws:
JMSException

receiveNoWait

public Message receiveNoWait()
                      throws JMSException
Receives the next message if one is immediately available.

Specified by:
receiveNoWait in interface MessageConsumer
Returns:
the next message produced for this message consumer, or null if one is not available
Throws:
JMSException - if the JMS provider fails to receive the next message due to some internal error.

close

public void close()
           throws JMSException
Closes the message consumer.

Since a provider may allocate some resources on behalf of a MessageConsumer outside the Java virtual machine, clients should close them when they are not needed. Relying on garbage collection to eventually reclaim these resources may not be timely enough.

This call blocks until a receive or message listener in progress has completed. A blocked message consumer receive call returns null when this message consumer is closed.

Specified by:
close in interface MessageConsumer
Throws:
JMSException - if the JMS provider fails to close the consumer due to some internal error.

dispose

public void dispose()
             throws JMSException
Throws:
JMSException

checkClosed

protected void checkClosed()
                    throws IllegalStateException
Throws:
IllegalStateException

sendPullCommand

protected void sendPullCommand(long timeout)
                        throws JMSException
If we have a zero prefetch specified then send a pull command to the broker to pull a message we are about to receive

Throws:
JMSException

checkMessageListener

protected void checkMessageListener()
                             throws JMSException
Throws:
JMSException

setOptimizeAcknowledge

protected void setOptimizeAcknowledge(boolean value)

setPrefetchSize

protected void setPrefetchSize(int prefetch)

acknowledge

public void acknowledge()
                 throws JMSException
Acknowledge all the messages that have been delivered to the client up to this point.

Throws:
JMSException

commit

public void commit()
            throws JMSException
Throws:
JMSException

rollback

public void rollback()
              throws JMSException
Throws:
JMSException

dispatch

public void dispatch(MessageDispatch md)
Specified by:
dispatch in interface ActiveMQDispatcher

getMessageSize

public int getMessageSize()

start

public void start()
           throws JMSException
Throws:
JMSException

stop

public void stop()

toString

public String toString()
Overrides:
toString in class Object

iterate

public boolean iterate()
Delivers a message to the message listener.

Returns:
Throws:
JMSException

isInUse

public boolean isInUse(ActiveMQTempDestination destination)

getLastDeliveredSequenceId

public long getLastDeliveredSequenceId()

getFailureError

public IOException getFailureError()

setFailureError

public void setFailureError(IOException failureError)

getOptimizedAckScheduledAckInterval

public long getOptimizedAckScheduledAckInterval()
Returns:
the optimizedAckScheduledAckInterval

setOptimizedAckScheduledAckInterval

public void setOptimizedAckScheduledAckInterval(long optimizedAckScheduledAckInterval)
                                         throws JMSException
Parameters:
optimizedAckScheduledAckInterval - the optimizedAckScheduledAckInterval to set
Throws:
JMSException

hasMessageListener

public boolean hasMessageListener()


Copyright © 2005–2013 The Apache Software Foundation. All rights reserved.