javax.jms.JMSException : No ManagedConnections available within configured blocking timeout

标签 java tomcat jms activemq apache-tomee

当我在 Tomcat 中运行 ActiveMQ 时,在添加新消息后访问服务器时收到以下异常:

javax.jms.JMSException: No ManagedConnections available within configured blocking timeout ( 5000 [ms] ) for pool org.apache.geronimo.connector.outbound.SinglePoolConnectionInterceptor@6581542c
at org.apache.activemq.ra.ActiveMQConnectionFactory.createConnection(ActiveMQConnectionFactory.java:101)
at org.apache.activemq.ra.ActiveMQConnectionFactory.createConnection(ActiveMQConnectionFactory.java:67)

我正在使用 Apache Tomee 来管理 ActiveMQ 队列。

我的ActiveMQ配置非常简单:

<?xml version="1.0" encoding="UTF-8"?>
<tomee>
    <!-- see http://tomee.apache.org/containers-and-resources.html -->

    <!-- activate next line to be able to deploy applications in apps -->
    <!-- <Deployments dir="apps" /> -->

    <Resource id="MyJmsResourceAdapter" type="ActiveMQResourceAdapter">
        BrokerXmlConfig =  broker:(tcp://localhost:61616)
        ServerUrl       =  tcp://localhost:61616
    </Resource>

    <Resource id="MyJmsConnectionFactory" type="javax.jms.ConnectionFactory">
        ResourceAdapter = MyJmsResourceAdapter
    </Resource>

</tomee>

为了定义队列,我有一个简单的代码:

@Resource(name = "myQueue")
private Queue barQueue;

@Resource
private ConnectionFactory connectionFactory;

/**
 * Push Message to Queue
 *
 * @param payload
 * @throws JMSException
 */
private void pushToQueue(Serializable payload) throws JMSException {
    Connection connection = connectionFactory.createConnection();
    connection.start();

    // Create a Session
    Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

    // Create a MessageProducer from the Session to the Topic or Queu
    MessageProducer producer = session.createProducer(barQueue);
    producer.setDeliveryMode(DeliveryMode.PERSISTENT);

    // Create a message
    ObjectMessage message = session.createObjectMessage(payload);

    // Tell the producer to send the message
    producer.send(message);
}

如果我在消息之间留一点间隙,我就可以很好地发送消息。但如果我对服务器稍微用力一点,我就会遇到上述异常。

在哪里可以配置连接池大小等? 使用后关闭连接是否有问题?

谢谢, 塞巴斯蒂安

最佳答案

我想我找到了:http://tomee.apache.org/jmsconnectionfactory-config.html

但我认为实际的问题是我没有关闭连接。

在示例中:http://tomee.apache.org/tomcat-activemq.html

最后有一个“...”。代码块末尾实际上缺少的是: 连接.close();

这解决了我的连接问题。

关于javax.jms.JMSException : No ManagedConnections available within configured blocking timeout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31929611/

相关文章:

java - 在java中使用Hashmap时遇到问题

java - 如何向 Android 应用添加隐私政策?

java - tomcat - HTTP 连接器 maxThreads/acceptCount 与 JDBC 池 maxActive 之间的比率

java - Spring Boot 无法启动 Tomcat 8

java - 如何在Java EE环境中使用JMS和JPA处理事务回滚?

javax.naming.NamingException : Cannot create resource instance of ActiveMQConnectionFactory

java - 在android中使用回调而不是实例化对象有什么好处

java - 确定用户输入的是整数还是 double ?

java - Teamcity 控制应用程序部署?

java - 使用Spring配置tibco jms