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&wireFormat.maxInactivityDuration=0&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/