activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Don Santillan <donzym...@gmail.com>
Subject Re: Question on consumers
Date Tue, 03 May 2011 18:05:36 GMT
Thanks a lot Martin. This is very helpful.

With this, I'd like to verify if my understanding is correct through the 
following code snippet:

ActiveMQConnectionFactory connectionFactory = new 
ActiveMQConnectionFactory(brokerURI);

Connection connection = connectionFactory.createConnection();

Destination destination = connection.createSession(isTransacted, 
acknowledgeMode).createQueue(queueName);

MessageProducer producer = connection.createSession(isTransacted, 
acknowledgeMode).createProducer(destination);

MessageConsumer consumer1 = connection.createSession(isTransacted, 
acknowledgeMode).createConsumer(destination);
consumer1.setMessageListener(new ConcreteMessageListenerImpl());
MessageConsumer consumer2 = connection.createSession(isTransacted, 
acknowledgeMode).createConsumer(destination);
consumer2.setMessageListener(new ConcreteMessageListenerImpl());
MessageConsumer consumer3 = connection.createSession(isTransacted, 
acknowledgeMode).createConsumer(destination);
consumer3.setMessageListener(new ConcreteMessageListenerImpl());
MessageConsumer consumer4 = connection.createSession(isTransacted, 
acknowledgeMode).createConsumer(destination);
consumer4.setMessageListener(new ConcreteMessageListenerImpl());
MessageConsumer consumer5 = connection.createSession(isTransacted, 
acknowledgeMode).createConsumer(destination);
consumer5.setMessageListener(new ConcreteMessageListenerImpl());

Thanks!
Don

On Tuesday, 03 May, 2011 08:13 PM, Martin C. wrote:
> Hi,
>
> the JMS threading model is based around the Session. Each Session is
> to be used by one thread. If you are using asynchronous mode (you
> register a MessageListener with the Session), every Session uses one
> thread or is to be used by one thread
> (http://download.oracle.com/javaee/1.4/api/javax/jms/Session.html). If
> you attach 5 consumers to a single session, only one of them will be
> called. You need 5 Sessions with each 1 consumer in order to feed 5
> consumers in parallel in asynchronous mode.
>
> This is not strictly speaking the truth, because in theory you may use
> a Session with more than one thread, but you need to ensure proper
> synchronization. If you are using asynchronous messaging, the
> following from http://download.oracle.com/javaee/1.4/api/javax/jms/MessageListener.html
> holds:
> <quote>Each session must insure that it passes messages serially to
> the listener. This means that a listener assigned to one or more
> consumers of the same session can assume that the onMessage method is
> not called with the next message until the session has completed the
> last call.</quote>
>
> So if you want to go parallel, you need to create more Sessions and
> MessageConsumers.
>
> Best regards,
> Martin
>
> On Mon, May 2, 2011 at 11:50 AM, Don Santillan<donzymeth@gmail.com>  wrote:
>> Hello,
>>
>> I have a basic question about message consumers that I really need to
>> confirm that my understanding is correct.
>>
>> Do message consumers run in different threads?
>>
>> Suppose I have 5 consumers assigned to a queue. Are these consumers
>> independent with each other and are running in different threads?
>>
>> Thanks!
>>

Mime
View raw message