activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Rob Davies <rajdav...@gmail.com>
Subject Re: CLIENT_ACKNOWLEDGE mode for a session misunderstanding?
Date Wed, 29 Oct 2008 17:06:33 GMT
Hi Eugeny,

As James stated earlier - you need to set the prefetch - but the value  
should be 0 - this will make ActiveMQ 'pull' rather than 'push'

cheers,

Rob

Rob Davies
http://fusesource.com
http://rajdavies.blogspot.com/


On 29 Oct 2008, at 15:07, Eugeny N Dzhurinsky wrote:

> On Tue, Oct 28, 2008 at 05:44:26PM +0000, James Strachan wrote:
>> 2008/10/28 Eugeny N Dzhurinsky <bofh@redwerk.com>:
>>> Hello!
>>>
>>> I am facing some strange issue with acknowledge mode in ActiveMQ.  
>>> After
>>> reading the specs, I realized the broker will never deliver a  
>>> message to the
>>> consumer unless the consumer acknowledges the previous message. So  
>>> I thought
>>> it is enough to not send the acknowledgement message to the server  
>>> in the
>>> onMessage method of the consumer and sent it later from another  
>>> thread, which
>>> does it's job. This means I spawn a thread when onMessage is  
>>> called and forget
>>> about it in this method.
>> You should only be using a JMS session from one thread at once - so
>> you should call message.acknowlege() from the consumer thread.
>
>   final MessageConsumer consumer = serverSession
>           .createConsumer(serverQueue);
>   consumer.setMessageListener(new MessageListener() {
>
>       public void onMessage(final Message message) {
>           System.out.println("Got message");
>           try {
>               System.out.println(message.getStringProperty(DATA));
>               // message.acknowledge();
>               successCount.incrementAndGet();
>           } catch (final Exception e) {
>               e.printStackTrace();
>           }
>       }
>
>   });
>
> Calling or not calling acknowledge doesn't make any difference - as  
> soon as
> onMessage returns, the next message is delivered to the consumer.
>
>> If you don't want the message broker to send another message to the
>> consumer until it is acknowledged, set prefetch to 1
>> http://activemq.apache.org/what-is-the-prefetch-limit-for.html
>
>   private static final String CONNECTION_URL = "vm://localhost? 
> broker.persistent=false&jms.prefetchPolicy.all=1";
>
> I am doing in this way, as can be found in the source I originally  
> posted.
>
> So is there a bug in ActiveMQ regarding the acknowledge mode or I  
> still
> missing something?
>
> -- 
> Eugene N Dzhurinsky


Mime
View raw message