activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From easyl <easy....@gmail.com>
Subject How to handle fast producer when JMS timeout happens?
Date Fri, 21 May 2010 13:25:27 GMT

Geronimo 2.2 / AMQ 5.3 

I have the following scenario

producerA  --send-->(Queue)-->  consumerB

The prodcerA sends JMS message continuously to consumerB, while consumerB
can consume message slower than that producerA produces. (consumerB
processes the message and has database operations.)

To test the system I let prodcerA sending message without pause.

At the beginning it seems no problem at all. No message stalled in the
Queue.

But after some hours the whole server run slower and slower, till a huge
amount of messages (e.g. 7000+) stalled in the Queue, while producerA still
sends message to the Queue. And the consumerB seems
 not work any more!

Once I stop the producerA, the messages would then slowly consumed by
consumerB.

In such situation I will get such exception from AMQ
javax.jms.JMSException: No ManagedConnections available within configured
blocking timeout ( 15000 [ms] ) for pool
org.apache.geronimo.connector.outbound.SinglePoolConnectionInterceptor@6bc31ee0
        at
org.apache.activemq.ra.ActiveMQConnectionFactory.createConnection(ActiveMQConnectionFactory.java:101)
        at
org.apache.activemq.ra.ActiveMQConnectionFactory.createConnection(ActiveMQConnectionFactory.java:67)
        at
org.apache.activemq.ra.ActiveMQConnectionFactory.createQueueConnection(ActiveMQConnectionFactory.java:120)


my activemq.xml

<broker xmlns="http://activemq.apache.org/schema/core"
            brokerName="${activemq.brokerName}"
            tmpDataDirectory="${activemq.data}/tmp_storage"
            useShutdownHook="false"
            start="false"
            advisorySupport="false"
            persistent="false">

 <destinationPolicy>
          <policyMap>
            <policyEntries>
              <policyEntry queue=">"  memoryLimit="128mb">
                <deadLetterStrategy>
                  <individualDeadLetterStrategy queuePrefix="DLQ."
useQueueForQueueMessages="true" />
                </deadLetterStrategy>
              </policyEntry>
              <policyEntry topic=">" memoryLimit="128mb">
                <deadLetterStrategy>
                  <individualDeadLetterStrategy topicPrefix="DLT."
useQueueForTopicMessages="true" />
                </deadLetterStrategy>
              </policyEntry>
            </policyEntries>
          </policyMap>
        </destinationPolicy>
....

Connection URL is

tcp://localhost:61616?keepAlive=true&amp;jms.copyMessageOnSend=false&amp;jms.watchTopicAdvisories=false&amp;socket.tcpNoDelay=true&amp;wireFormat.tcpNoDelayEnabled=true


should I disable producerFlowControl?
is keepAlive a problem?

How to keep the system robust when having fast producer and slow consumer?

thanks :P


-- 
View this message in context: http://old.nabble.com/How-to-handle-fast-producer-when-JMS-timeout-happens--tp28633802p28633802.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.


Mime
View raw message