Databasefejl slukker ActiveMQ Windows-tjenesten ved hjælp af JDBC-persistens

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har en ActiveMQ-mægler, der kører som en Windows-tjeneste. Dens bruger jdbcPersistenceAdapter med Oracle datakilde og Oracle's Universal Connection Pooling (UCP).


Når databasen er nede (på grund af netværksproblemer eller planlagt vedligeholdelse), slukker ActiveMQ windows-tjenesten helt. Dette gør selvfølgelig ikke mægleren utilgængelig, selv efter at databasen er blevet genoprettet.


Jeg har forsøgt forbindelse validering i UCP, DBCP med forbindelse validering og endda MySQL datakilde uden succes. Tjenesten lukkes inden for 30 sekunder efter fejl i databasen (jeg tror, ​​at det er fordi standard cleanupInterval er 30 sekunder).


Er der en måde at forhindre Windows-tjenesten i at lukke ned og få det til at vente på tilgængelighed af databasen?
Enhver hjælp er meget værdsat.


Her er min nuværende konfiguration fra activemq.xml:


<persistenceAdapter>
    <jdbcPersistenceAdapter dataSource="#oracle-ds"/>
</persistenceAdapter>

<bean id="oracle-ds" class="oracle.ucp.jdbc.PoolDataSourceFactory" 
    factory-method="getPoolDataSource" p:URL="jdbc:oracle:thin:@localhost:1521:amq" 
    p:connectionFactoryClassName="oracle.jdbc.pool.OracleDataSource" 
    p:validateConnectionOnBorrow="true" p:user="appuser" p:password="userspassword" />

Bedste reference


Generelt skal du bruge en JDBC master/slave til at understøtte failover fra en anden mægler, når databasen bliver utilgængelig ...


se http://activemq.apache.org/jdbc-master-slave.html[2]


Når det er sagt, er der et kendt problem med JDBC master/slave failover, der blev fastsat i 5.6.0 ...


se https://issues.apache.org/jira/browse/AMQ-1958[3]