Uploaded image for project: 'ActiveMQ Classic'
  1. ActiveMQ Classic
  2. AMQ-2680

Producer Flow Control seems to be broken

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Critical
    • Resolution: Fixed
    • 5.3.1
    • 5.4.0
    • Broker, Documentation
    • None
    • SLES 11, IBM JDK 1.6

    Description

      How to reproduce:

      • Download ActiveMQ 5.3.1
      • Start broker with the attached configuration

        <systemUsage>
        <systemUsage>
        <memoryUsage>
        <memoryUsage limit="10 mb"/>
        </memoryUsage>
        <storeUsage>
        <storeUsage limit="10 mb" name="queue/RemoteQ"/>
        </storeUsage>
        <tempUsage>
        <tempUsage limit="3 gb"/>
        </tempUsage>
        </systemUsage>
        </systemUsage>
      • Start example producer/consumer
        cd examples
        ant producer -Durl=tcp://127.0.0.1:61616 -Dmax=100000 -Dsubject=queue/RemoteQ -Ddurable=true -DsleepTime=2
        sleep 600
        ant consumer -Durl=tcp://127.0.0.1:61616 -Dsubject=queue/RemoteQ -Dmax=100000 -DsleepTime=2

      The problem:
      When the 10mb limit is reached, the producer is blocked forever.
      The expected behavior is, that if a consumer cleans the queue, producers are able to post more messages.
      Neither cleaning up the queue, restarting producers and restarting the broker helps

      It would be also a good idea to enhance the documentation about producer-flow-control:
      (http://activemq.apache.org/producer-flow-control.html)

      • expected behavior
      • what is limited in detail by using system|store|tempUsage

      The entire configuration :

      <beans
      xmlns="http://www.springframework.org/schema/beans"
      xmlns:amq="http://activemq.apache.org/schema/core"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
      http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">

      <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
      <property name="locations">
      <value>file:${activemq.base}/conf/credentials.properties</value>
      </property>
      </bean>

      <broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}/data" >

      <destinationPolicy>
      <policyMap>
      <policyEntries>

      <policyEntry topic=">" producerFlowControl="true" memoryLimit="10mb">

      <deadLetterStrategy>
      <!--
      Use the prefix 'DLQ.' for the destination name, and make
      the DLQ a queue rather than a topic
      -->
      <individualDeadLetterStrategy
      queuePrefix="DLQ." useQueueForQueueMessages="true" />
      </deadLetterStrategy>

      <pendingSubscriberPolicy>
      <vmCursor />
      </pendingSubscriberPolicy>
      </policyEntry>
      <policyEntry queue=">" producerFlowControl="true" memoryLimit="10mb">
      <!-- Use VM cursor for better latency
      For more information, see:

      http://activemq.apache.org/message-cursors.html

      <pendingQueuePolicy>
      <vmQueueCursor/>
      </pendingQueuePolicy>
      -->
      <deadLetterStrategy>
      <!--
      Use the prefix 'DLQ.' for the destination name, and make
      the DLQ a queue rather than a topic
      -->
      <individualDeadLetterStrategy
      queuePrefix="DLQ." useQueueForQueueMessages="true" />
      </deadLetterStrategy>

      </policyEntry>
      </policyEntries>
      </policyMap>
      </destinationPolicy>

      <systemUsage>
      <systemUsage>
      <memoryUsage>
      <memoryUsage limit="10 mb"/>
      </memoryUsage>
      <storeUsage>
      <storeUsage limit="10 mb" name="queue/RemoteQ"/>
      </storeUsage>
      <tempUsage>
      <tempUsage limit="3 gb"/>
      </tempUsage>
      </systemUsage>
      </systemUsage>

      <transportConnectors>
      <transportConnector name="openwire" uri="tcp://0.0.0.0:61616"/>
      </transportConnectors>

      </broker>

      <import resource="jetty.xml"/>

      </beans>

      Attachments

        1. producer-flow-control-problem.zip
          387 kB
          Marc Schöchlin
        2. activemq-broken-flow-control.xml
          6 kB
          Marc Schöchlin
        3. activemq.xml
          3 kB
          Marc Schöchlin

        Activity

          People

            gtully Gary Tully
            scoopex Marc Schöchlin
            Votes:
            1 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: