Alex Colomb
2014-12-31 15:57:11 UTC
I've been tracking down some performance issues on one of our queues. The queue is hosted on an embedded broker. There is one producer and one consumer. All messages sent to the queue are non-persistent. The producer initially will have a burst of ~30k messages and then slow down to 100 messages a second. During the initial burst of messages, I see the consumer slowly consuming messages and eventually a large number of messages expire off the queue before the consumer can get to them. I've tracked the issue down to the maxPageSize setting. If I leave it at the default, messages are consumed very quickly and non are expired. If I set it to 100k, I see the behavior described above.
The documentation (http://activemq.apache.org/per-destination-policies.html) describes maxPageSize as "maximum number of persistent messages to page from store at a time." Why is changing this setting affecting the delivery/consumption of non persistent messages? Why would a large value slow things down?
Here is the programmatic broker configuration:
BrokerService embeddedBroker = new BrokerService();
PolicyEntry policyEntry = new PolicyEntry();
policyEntry.setQueue( ">" );
policyEntry.setProducerFlowControl( true );
policyEntry.setAdvisoryForSlowConsumers( true );
policyEntry.setMaxPageSize( 100000 );
policyEntry.setExpireMessagesPeriod( 15000 );
PolicyMap policyMap = new PolicyMap();
policyMap.setDefaultEntry( policyEntry );
embeddedBroker.setDestinationPolicy( policyMap );
embeddedBroker.addConnector( "tcp://0.0.0.0:51515" );
I'm using Active MQ 5.10.0.
Thank you.
The documentation (http://activemq.apache.org/per-destination-policies.html) describes maxPageSize as "maximum number of persistent messages to page from store at a time." Why is changing this setting affecting the delivery/consumption of non persistent messages? Why would a large value slow things down?
Here is the programmatic broker configuration:
BrokerService embeddedBroker = new BrokerService();
PolicyEntry policyEntry = new PolicyEntry();
policyEntry.setQueue( ">" );
policyEntry.setProducerFlowControl( true );
policyEntry.setAdvisoryForSlowConsumers( true );
policyEntry.setMaxPageSize( 100000 );
policyEntry.setExpireMessagesPeriod( 15000 );
PolicyMap policyMap = new PolicyMap();
policyMap.setDefaultEntry( policyEntry );
embeddedBroker.setDestinationPolicy( policyMap );
embeddedBroker.addConnector( "tcp://0.0.0.0:51515" );
I'm using Active MQ 5.10.0.
Thank you.