Apache ActiveMQ Classic 5.12.1 the lease-database-locker does not work properly

36 views Asked by At

I am using ActiveMQ Classic shared database strategy to ensure high availability. config:

<amq:broker useJmx="false" persistent="true" startAsync="true" brokerName="${server.instance.name}" useShutdownHook="false">
    <amq:persistenceAdapter>
            <amq:jdbcPersistenceAdapter dataSource="#dataSource" lockKeepAlivePeriod="5000">
               <amq:databaseLocker>
                    <amq:lease-database-locker lockAcquireSleepInterval="10000" ></amq:lease-database-locker>
               </amq:databaseLocker>
            <amq:statements>
                <amq:statements lockCreateStatement="SELECT * FROM ACTIVEMQ_LOCK WHERE ID = 1 FOR UPDATE WAIT 0" />
            </amq:statements>
        </amq:jdbcPersistenceAdapter>
    </amq:persistenceAdapter>

    <amq:connectionFactory id="connectionFactory"
    brokerURL="${jms.url}" userName="${jms.user}" password="${jms.password}">
    <property name="redeliveryPolicy" ref="redeliveryPolicy" />
    </amq:connectionFactory>

   <!-- Other Bean Configs -->
   <amq:transportConnectors/>
   <amq:destinationPolicy/>
   <bean id="redeliveryPolicy" class="org.apache.activemq.RedeliveryPolicy"/>
</beans>

Issue: I am using 2 server architecture where

  1. When I start server1, server1 become the JMS master and same instance entry is added inside ACTIVEMQ_LOCK.
  2. Now server1 is running, and I started server2 the JMS master is transfer to server2, and now ACTIVEMQ_LOCK will have entry for the server2 instance.

Ideally, the Master transfer should happen only if server1(master) is down/unavailable. Could you please share thoughts if I am missing something in the configurations?

0

There are 0 answers