activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "James Strachan" <james.strac...@gmail.com>
Subject Re: Consumer blocking when session created on same connection as blocked producer
Date Tue, 27 Feb 2007 09:19:23 GMT
So the reason for this is that currently there is a single thread per
connection processing server side operations. Normally these
operations are pretty fast; but if a producer is blocked, currently we
block the producer thread (to stopt it potentially sending more
messages and causing more trouble).

So if you are getting into scenarios of blocking producers, its
probably worth having a separate connection for all your consumers.

Another option is to try out 4.2-SNAPSHOT which has spooling to disk
as an option (as an alternative to blocking producers).


On 2/26/07, TonyLeigh <tleigh@ndsuk.com> wrote:
>
> Hello All,
>
> I've been struggling with a problem of ActiveMQ locking up with a
> combination of fast producers and slow consumers.  After trawling through
> the threads I think I understand what is happening and why the lockup
> occurs, but I can only solve the lockup with two connections when it seems
> that one should work.
>
> The situation is that I have a  http://www.nabble.com/file/6787/Client.java
> Client.java
>  making large requests as a fast producer and a
> http://www.nabble.com/file/6788/Server.java Server.java  acting as a slow
> consumer.
>
> If you run the examples with a standard broker configuration the broker will
> lock up due to lack of memory as the consumer in the sender cannot consume
> messages as it needs to produce a reply inorder to send an ack.  If you
> change the broker config to limit the memory per queue:
>
>     <destinationPolicy>
>       <policyMap><policyEntries>
>           <policyEntry queue="TEST.>" memoryLimit="20000"/>
>           <policyEntry queue="TEST.SERVER.IN" memoryLimit="10000"/>
>       </policyEntries></policyMap>
>     </destinationPolicy>
>
> Then the broker does not lock up and the server is able to produce messages
> to the client input queue.
>
> The problem is that the consumer in the client will block and not receive
> messages from the client queue if the consumer (and session) were created
> from the same connection as the producer.  If a separate connection is used
> then the client consumer will always consumer messages and the system does
> not lock.
>
> Why do I need a separate connection for the client consumer?  According to
> the JMS spec a session should create a separate thread for message
> consumption so the client should not block on consumption even if message
> production is blocked.
>
> Thanks,
>
> Tony
>
>
> --
> View this message in context: http://www.nabble.com/Consumer-blocking-when-session-created-on-same-connection-as-blocked-producer-tf3294332s2354.html#a9163565
> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>
>


-- 

James
-------
http://radio.weblogs.com/0112098/

Mime
View raw message