数据库故障使用JDBC持久性关闭ActiveMQ windows服务

数据库故障使用JDBC持久性关闭ActiveMQ windows服务,windows,service,configuration,jdbc,activemq,Windows,Service,Configuration,Jdbc,Activemq,我有一个作为Windows服务运行的ActiveMQ代理。它将jdbcPersistenceAdapter与Oracle数据源和Oracle的通用连接池(UCP)一起使用 数据库关闭时(由于网络问题或定期维护),ActiveMQ windows服务将完全关闭。当然,这会使代理即使在数据库恢复后也不可用 我尝试过UCP中的连接验证,DBCP中的连接验证,甚至MySQL数据源都没有成功。该服务在数据库发生故障后30秒内关闭(我相信这是因为默认的清理间隔为30秒) 是否有方法阻止windows服务关闭

我有一个作为Windows服务运行的ActiveMQ代理。它将jdbcPersistenceAdapter与Oracle数据源和Oracle的通用连接池(UCP)一起使用

数据库关闭时(由于网络问题或定期维护),ActiveMQ windows服务将完全关闭。当然,这会使代理即使在数据库恢复后也不可用

我尝试过UCP中的连接验证,DBCP中的连接验证,甚至MySQL数据源都没有成功。该服务在数据库发生故障后30秒内关闭(我相信这是因为默认的清理间隔为30秒)

是否有方法阻止windows服务关闭并使其等待数据库可用性? 非常感谢您的帮助

以下是我在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" />

通常,当数据库不可用时,您应该使用JDBC主/从服务器来支持从另一个代理进行故障切换

也就是说,JDBC主/从故障切换存在一个已知问题,该问题在5.6.0中已修复


请参见

在使用持久性eAdApterFactory日志时,您是否会得到相同的行为?谢谢@boday的提示。我配置了journalPersistenceAdapterFactory,得到了相同的行为,windows服务在30秒内停止。我在Oracle数据存储中使用了一个新的persistenceFactory,而不是persistenceAdapter。