activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Filip Hanik - Dev Lists <devli...@hanik.com>
Subject Re: OOME - ActiveMQMessageConsumer.unconsumedMessages
Date Thu, 01 May 2008 15:35:36 GMT
Rob Davies wrote:
>
> On 1 May 2008, at 00:02, Filip Hanik - Dev Lists wrote:
>
>> There doesnt seem to be a way of limiting how messages are delivered 
>> to the client.
>> the ActiveMQMessageConsumer.unconsumedMessages seems to fill up, all 
>> to quickly, and eventually cause an OOME
>>
>> we have this setting on the server
>> <destinationPolicy>      <policyMap>
>>       <policyEntries>
>>         <policyEntry topic=">" producerFlowControl="false" 
>> memoryLimit="10mb">
>>           <deadLetterStrategy>              <sharedDeadLetterStrategy 
>> processExpired="false" processNonPersistent="false" />            
>> </deadLetterStrategy>
>>           <!--  10 seconds worth -->
>>           <!-- lets force old messages to be discarded for slow 
>> consumers -->
>>           <pendingMessageLimitStrategy>
>>             <constantPendingMessageLimitStrategy limit="1000"/>
>>           </pendingMessageLimitStrategy>
>>         </policyEntry>              </policyEntries>
>>     </policyMap>
>>   </destinationPolicy>
>>
>>
>> is there another setting to protect against this kind of OOME
>>
>> Filip
>
> Hi Filip,
>
> You can override how many messages are delivered to a consumer by 
> setting its prefetch limit - see the FAQ entry - 
> http://activemq.apache.org/what-is-the-prefetch-limit-for.html
hi Rob, yes I have that setting
uri="tcp://127.0.0.1:61616?jms.prefetchPolicy.all=10&amp;wireFormat.maxInactivityDuration=0&amp;jms.redeliveryPolicy.maximumRedeliveries=-1"

it's still downloading tons of messages to the client, I had to patch 
the code itself

in ActiveMQMessageConsumer.java I did
  synchronized (unconsumedMessages.getMutex()) {
    if (unconsumedMessages.size()>MAX_UNCONSUMED_MSGS) {
      Object o = unconsumedMessages.dequeueNoWait();
        if (LOG.isDebugEnabled()) {
          LOG.debug("Unconsumed message size too large, removing oldest 
message:"+o);
        }
      }
      unconsumedMessages.enqueue(md);
  }

this way I could drop messages on the client, but I was hoping there was 
a server side config

Filip
>
>
>
>
> cheers,
>
> Rob
>
> http://open.iona.com/ -Enterprise Open Integration
> http://rajdavies.blogspot.com/
>
>
>
>


Mime
View raw message