You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@activemq.apache.org by "Hans Bausewein (JIRA)" <ji...@apache.org> on 2008/07/23 22:37:00 UTC

[jira] Commented: (AMQ-1868) Producer block when queue memory limit is setted to 5Mb and no consumer is actived

    [ https://issues.apache.org/activemq/browse/AMQ-1868?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=44491#action_44491 ] 

Hans Bausewein commented on AMQ-1868:
-------------------------------------

Other people expect that messages are never lost!

Do you have a solution? An infinite amount of memory?

This describes the issue more or less:

  http://activemq.apache.org/slow-consumer-handling.html


It depends very much on your application, what's the best solution.

I'd say, if you need long term storage, use a database.

In many cases you can use the size of the queue as a signal that something is going terribly wrong.
Also it could be that messages become worthless as they get old. (... and "old" could be "seconds").

In a dynamic application a blocked producer is usually the best. As soon as messages can be delivered, it will be unblocked and continue producing more messages. 

If producer and consumers are on the same machine or use the same resources it's a nice way to distribute the load in a proper way. A blocked producer does not cost resources, so they are available for the consumers.

Hans


> Producer block when queue memory limit is setted to 5Mb and no consumer is actived
> ----------------------------------------------------------------------------------
>
>                 Key: AMQ-1868
>                 URL: https://issues.apache.org/activemq/browse/AMQ-1868
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Broker
>    Affects Versions: 5.1.0
>         Environment: Unix, jdk 1.5.0_12,  AMQ 5.1.0
>            Reporter: Alessandro Zanfardino
>         Attachments: activemq.xml, AMQTester.zip
>
>
> Hallo
>  I'm using the attached source  code  to test  AMQ 5.1.0 
> I'm using following setting:
>        //SESSION
>     ackMode = Session.AUTO_ACKNOWLEDGE;
>         //FACTORY
>     dispatchAsync = true;
>     useAsyncSend  = false;  
>        //PRODUCERS
>     DelveryMode=Pesrsistent 
>     timeToLive = 21600000; //6h
>  If I use the following configuration in activemq.xml:  
>   <memoryUsage limit="20 mb"/>
>   <policyEntry queue=">" memoryLimit="5mb"/>
>  I noted this behaviour:
>  if producer  starts a loop of  sendMessage  on a queue where no consumer is listen, after N messages, when the 5Mb are full, producer is blocked.
>  Block ends when some consumer registers a listener on this queue and start to conuming messages.
>  
>   If I change the configuration, removing queue memory limit like below:  
>   <memoryUsage limit="20 mb"/>
>   <policyEntry queue=">"   />
>    and producer  starts a loop of  sendMessage  on a queue where no consumer is listen, producer is NEVER blocked.
>    Memory usage percentage go up until 90% and then remains steady, but producer continues to send.
>     I expected this same behaviour when queue memory limit was 5Mb, also. 
>    Further, I set values for  queue memory limit higher than 5Mb   and repeated the test :
>    memoryLimit="10 mb"    =>      producer was blocked
>   memoryLimit="18 mb"   (=90% of 20Mb)   =>      producer was blocked
>   memoryLimit="19 mb"   ( >90% of 20Mb)   =>      producer NEVER blocked
>    I expected that  producer NEVER blocked in every cases.
>    Please can you help me for this issue?
>    Feel free to ask me other details. 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.