【问题标题】:ConnectionPool: pool is empty - increase either maxPoolSize or borrowConnectionTimeoutConnectionPool:池为空 - 增加 maxPoolSize 或 borrowConnectionTimeout
【发布时间】:2020-07-08 06:10:59
【问题描述】:

我的 springboot 应用程序连接到数据库和 MQ 并使用 Atomikos 事务管理器时遇到了这个问题。

com.atomikos.jms.AtomikosJMSException|Connection pool exhausted - try increasing 'maxPoolSize' and/or 'borrowConnectionTimeout' on the AtomikosConnectionFactoryBean.
com.atomikos.datasource.pool.PoolExhaustedException: ConnectionPool: pool is empty - increase either maxPoolSize or borrowConnectionTimeout
    at com.atomikos.datasource.pool.ConnectionPool.waitForAtLeastOneAvailableConnection(ConnectionPool.java:326)
    at com.atomikos.datasource.pool.ConnectionPool.findOrWaitForAnAvailableConnection(ConnectionPool.java:144)
    at com.atomikos.datasource.pool.ConnectionPool.borrowConnection(ConnectionPool.java:132)
    at com.atomikos.datasource.pool.ConnectionPoolWithSynchronizedValidation.borrowConnection(ConnectionPoolWithSynchronizedValidation.java:23)
    at com.atomikos.jms.AtomikosConnectionFactoryBean.createConnection(AtomikosConnectionFactoryBean.java:601)
    at org.springframework.jms.support.JmsAccessor.createConnection(JmsAccessor.java:196)
    at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.access$100(AbstractPollingMessageListenerContainer.java:77)
    at org.springframework.jms.listener.AbstractPollingMessageListenerContainer$MessageListenerContainerResourceFactory.createConnection(AbstractPollingMessageListenerContainer.java:490)
    at org.springframework.jms.connection.ConnectionFactoryUtils.doGetTransactionalSession(ConnectionFactoryUtils.java:325)
    at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:281)
    at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:245)
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1189)
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1179)
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:1076)
    at java.lang.Thread.run(Thread.java:748)

我尝试打印 maxPoolSize 并发现它是 1。此页面介于 (https://www.atomikos.com/Documentation/ConfiguringJms) 之间,我发现他们将 MaxPoolSize 增加到 5 的行。我只是尝试将其设置为 2 并且它有效。

AtomikosConnectionFactoryBean xaConnectionFactory = new AtomikosConnectionFactoryBean();
        xaConnectionFactory.setXaConnectionFactory(ibmMQXAConnectionFactory);
        xaConnectionFactory.setMaxPoolSize(2);

有人可以帮助我了解理想的池大小应该是多少。它是干什么用的?

【问题讨论】:

    标签: spring-boot jms connection-pooling jta atomikos


    【解决方案1】:

    为了处理消息,Atomikos 使用 DB 和 JMS 连接(在您的情况下)。 这些连接取自可用连接池。要了解为什么需要连接池,请以此链接为起点 - Connection_pool

    简单地说——为了一次处理一条消息,Atomikos 需要一个 DB 和一个 JMS 连接/会话。因此,如果您计划并行处理 10 条消息,则每个连接池的大小必须至少为 10(DB 连接池为 10,JMS 连接池为 10)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-15
      • 2019-03-10
      • 1970-01-01
      • 1970-01-01
      • 2018-11-12
      • 2021-11-08
      相关资源
      最近更新 更多