Hi, 

We are implementing internal notification system for our customer. On some 
point we have requirement to implement message prioritization. The simplest 
way, in my opinion, is to use JMS message prioritization feature describer in 
this doc: http://activemq.apache.org/how-can-i-support-priority-queues.html

In our case sender and reciever is Camel routes. On reviewer side we have 1 
conduming endpoing with 2 or more concurrent consumers. In the reciever route 
we do routing and balancing of messages between external service providers. We 
can't use many separate endpoints with selective consumers to implement 
prioritization, because of implementation logic in balancer.

We have stand alone Activemq broker for supporting our notification gate. For 
persistence we try 2 options:

1. Plain JDBC:

After some threshold of queue size (about 6000msg) hi priority messages stoped 
to dispatch. Even after all low priority messages dispatched ! We are see not 
dispatched messages through web console and JMX. Restarging the broker will 
dispatch messages.
Similar to described in that bug: http://fusesource.com/issues/browse/MB-747

In searching of solution we try to use journaled JDBC...

2. Journaled JDBC:

Config:

        <destinationPolicy>
            <policyMap>
              <policyEntries>
                <policyEntry memoryLimit="1mb" producerFlowControl="true" 
topic="&gt;">
                  <pendingSubscriberPolicy>
                    <vmCursor/>
                  </pendingSubscriberPolicy>
                </policyEntry>
                <policyEntry queue="&gt;" memoryLimit="10mb" 
prioritizedMessages="true" producerFlowControl="true"  maxAuditDepth="100000">
              
                </policyEntry>
              </policyEntries>
            </policyMap>
        </destinationPolicy>  
  
        <managementContext>
            <managementContext createConnector="true"/>
        </managementContext>

        <persistenceFactory>
            <journalPersistenceAdapterFactory 
dataDirectory="${activemq.base}/data" journalLogFiles="5" 
dataSource="#mssql-ds"/>
        </persistenceFactory>

After 2200 msgs in queue messages are dispatched without prioritization at all. 
But the is no stacked messages. After queue size is down to 2200 and less 
prioritization is restored to expected.
Changing log size and other documented params of broker do not resolve issue :(

For both variants we are tried all versions from: 5.4.* to latest 5.5.* incude 
FUSE Source builds. 
Situation 100% reproducible.

Please, help with that... Actualy we already in production with variant 2 and 
must constantly tune consuming speed to not exceed 2000 msgs in queue.

P.S.: currently we are investigating that ticket 
https://issues.apache.org/jira/browse/AMQ-3436 . Can it be relevant ?

-- 
Regards, 
Vladimir Konkov

Reply via email to