Activemq代理挂起,hikariCP和自动提交设置为false
我的应用程序中有一个需要DS的嵌入式ActiveMQ。我使用Tomcat CP(已经好几年了),现在正试图切换到Hikari。MQ代理的startAsynch标志设置为false 在配置Hikari时,如果我将autoCommit设置为false,ActiveMQ代理将在启动期间挂起 然而,如果我将autocommit设置为True,那么就没有问题了,并且代理程序运行正常 另一方面,如果我在startAsynch标志为true的情况下启动ActiveMQ,则代理不会出现任何问题,即使Hikari中的autoCommit设置为false 这里有一个有趣的标题——它出现在tomcat CP中,自动提交使用底层驱动程序使用的任何东西——在我的例子中,它是oracle驱动程序,oracle驱动程序的默认值是autocommit,它似乎设置为true ActiveMQ版本为5.16.0,Hikari版本为3.4.5 HikariCP配置为:Activemq代理挂起,hikariCP和自动提交设置为false,activemq,hikaricp,autocommit,Activemq,Hikaricp,Autocommit,我的应用程序中有一个需要DS的嵌入式ActiveMQ。我使用Tomcat CP(已经好几年了),现在正试图切换到Hikari。MQ代理的startAsynch标志设置为false 在配置Hikari时,如果我将autoCommit设置为false,ActiveMQ代理将在启动期间挂起 然而,如果我将autocommit设置为True,那么就没有问题了,并且代理程序运行正常 另一方面,如果我在startAsynch标志为true的情况下启动ActiveMQ,则代理不会出现任何问题,即使Hikari
<bean id="dataSourceForBroker" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
<property name="driverClassName" value="${driverClassName}"/>
<property name="jdbcUrl" value="${url}"/>
<property name="username" value="${dbusername}"/>
<property name="password" value="${password}"/>
<property name="maximumPoolSize" value="${dbSessionMaxActive}" />
<property name="autoCommit" value="false"/>
<property name="minimumIdle" value="10" />
<property name="maxLifetime" value="30000" />
<property name="connectionTimeout" value="60000" />
</bean>
有关于为什么会发生这种情况的建议吗?我在这里有点迷路了
提前谢谢
-anish你为什么要尝试切换到Hikari?好问题-不幸的是,我没有一个好答案,只是我正在试验它是否性能更好。如果连接池实现是ActiveMQ 5.x的性能瓶颈,我会感到惊讶。当然,它也有它的局限性。旨在解决这些限制。如果你想要一个更高性能的ActiveMQ版本,我建议你试试。Thx的指针-将研究Artemis。然而,暂时忽略性能-我试图找到配置不工作的原因不幸的是,我不知道配置不工作的原因。您可以尝试在代理挂起时获取一些线程转储,查看它在做什么,然后在GitHub中查找代码。
public void ccreateBroker(){
BrokerService broker = new BrokerService();
broker.setBrokerId("myBroker");
broker.setBrokerName("myBroker");
broker.setPersistent(true);
broker.setUseJmx(true);
broker.setUseShutdownHook(true);
broker.setStartAsync(false);
broker.requestRestart();
broker.getManagementContext().setConnectorPort(9999);
broker.addShutdownHook(() -> {
brokerStarted = false;
logger.info("Active MQ broker was shutdown");
});
ManagementContext managementContext = new ManagementContext();
managementContext.setCreateConnector(false);
broker.setManagementContext(managementContext);
JDBCPersistenceAdapter jdbcPersistenceAdapter = new JDBCPersistenceAdapter();
jdbcPersistenceAdapter.setDataSource(dataSource);
LeaseDatabaseLocker leaseDatabaseLocker = new LeaseDatabaseLocker();
try {
broker.setPersistenceAdapter(jdbcPersistenceAdapter);
jdbcPersistenceAdapter.setLockKeepAlivePeriod(5000);
leaseDatabaseLocker.setLockAcquireSleepInterval(10000);
jdbcPersistenceAdapter.setLocker(leaseDatabaseLocker);
broker.addConnector("vm://hexgenBroker");
broker.start();
brokerStarted = true;
} catch (Exception e) {
throw new RuntimeException("Broker failed -", e);
}
}