javax.jms.JMSException:配置超过 50 个资源适配器时出现最大连接数 (50) 错误 - MDB

Posted

技术标签:

【中文标题】javax.jms.JMSException:配置超过 50 个资源适配器时出现最大连接数 (50) 错误 - MDB【英文标题】:javax.jms.JMSException: maximum connections (50) reached error while configuring more than 50 resource adapters - MDB 【发布时间】:2018-12-14 22:11:23 【问题描述】:

当我们尝试配置超过 50 个 MDB(每个 MDB 到不同的 MQ)时,我们遇到了以下异常。我尝试如下更改standalone.xml 配置,但仍然没有帮助。有人可以帮助我们吗?

独立的.xml

<short-running-threads>
    <core-threads count="90"/>
    <queue-length count="90"/>
    <max-threads count="90"/>
    <keepalive-time time="10" unit="seconds"/>
</short-running-threads>
<long-running-threads>
    <core-threads count="90"/>
    <queue-length count="90"/>
    <max-threads count="90"/>
    <keepalive-time time="10" unit="seconds"/>
</long-running-threads>

堆栈跟踪:

错误 [org.jboss.msc.service.fail] (ServerService 线程池 -- 185) MSC000001:启动服务失败 jboss.deployment.subunit."test.ear"."testAppMDB.jar".component.TESTMDB.START: 服务中的 org.jboss.msc.service.StartException jboss.deployment.subunit."test.ear"."TestAppMDB.jar".component.TESTMDB.START: java.lang.RuntimeException: com.ibm.mq.connector.DetailedResourceAdapterInternalException: MQJCA1011:分配 JMS 连接失败。,错误代码:MQJCA1011 内部错误导致尝试分配连接失败。 有关失败的详细信息,请参阅链接的异常。在 org.jboss.as.ee.component.ComponentStartService$1.run(ComponentStartService.java:57) [jboss-as-ee-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14] 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [rt.jar:1.8.0_102] 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) [rt.jar:1.8.0_102] 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_102] 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_102] 在 java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_102] 在 org.jboss.threads.JBossThread.run(JBossThread.java:122) 原因: java.lang.RuntimeException: com.ibm.mq.connector.DetailedResourceAdapterInternalException: MQJCA1011:分配 JMS 连接失败。,错误代码:MQJCA1011 内部错误导致尝试分配连接失败。 有关失败的详细信息,请参阅链接的异常。在 org.jboss.as.ejb3.component.messagedriven.MessageDrivenComponent.activate(MessageDrivenComponent.java:209) 在 org.jboss.as.ejb3.component.messagedriven.MessageDrivenComponent.start(MessageDrivenComponent.java:181) 在 org.jboss.as.ee.component.ComponentStartService$1.run(ComponentStartService.java:54) [jboss-as-ee-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14] ... 6 更多原因: com.ibm.mq.connector.DetailedResourceAdapterInternalException: MQJCA1011:分配 JMS 连接失败。,错误代码:MQJCA1011 内部错误导致尝试分配连接失败。 有关失败的详细信息,请参阅链接的异常。在 com.ibm.mq.connector.services.JCAExceptionBuilder.buildException(JCAExceptionBuilder.java:134) 在 com.ibm.mq.connector.services.JCAExceptionBuilder.buildException(JCAExceptionBuilder.java:105) 在 com.ibm.mq.connector.inbound.ConnectionHandler.allocateConnection(ConnectionHandler.java:165) 在 com.ibm.mq.connector.inbound.MessageEndpointDeployment.acquireConnection(MessageEndpointDeployment.java:284) 在 com.ibm.mq.connector.inbound.MessageEndpointDeployment.(MessageEndpointDeployment.java:233) 在 com.ibm.mq.connector.ResourceAdapterImpl.endpointActivation(ResourceAdapterImpl.java:393) 在 org.jboss.jca.core.rar.EndpointImpl.activate(EndpointImpl.java:191) 在 org.jboss.as.ejb3.component.messagedriven.MessageDrivenComponent.activate(MessageDrivenComponent.java:207) ... 8 更多原因:javax.jms.JMSException:最大连接数 (50) 到达 com.ibm.mq.connector.in

【问题讨论】:

【参考方案1】:

很难从堆栈跟踪的格式中分辨出来,但在我看来,异常来自 WebSphereMQ JCA 资源适配器,这表明问题出在 WebSphereMQ 服务器的配置上,这似乎受到限制可能的连接数为 50。更改 JBoss 应用程序服务器中的线程池配置不会解决问题。您需要更改 WebSphereMQ 服务器以允许超过 50 个连接。

【讨论】:

感谢您的 cmets。是的,你是正确的,这不是 JBoss 的问题。因为相同的 MDB 配置在另一个环境中工作。我们正在检查 Windows 环境中的问题,看起来 TCP/IP 配置在我们的服务器中阻止了这一点。但直到现在还无法获得清晰的图像。如果我们能够解决这个问题,将分享详细信息。【参考方案2】:

这个异常

Caused by: javax.jms.JMSException: maximum connections (50) reached at com.ibm.mq.connector.inbound.ConnectionHandler.allocateConnection

是 WebSphere MQ 资源适配器中 maxConnection 属性的默认设置 (50) 的结果。查看此页面以获取更多详细信息Configuring properties for the IBM MQ resource adapter。

您需要在资源适配器配置中更改此属性。我不知道您如何在 JBoss 中配置它,但在 WebSphere 中您可以通过资源 > JMS > JMS 提供者 > 资源适配器属性进行配置。

【讨论】:

【参考方案3】:

您可以增加可用连接数(默认为 50):

    <subsystem xmlns="urn:jboss:domain:resource-adapters:5.0">
        <resource-adapters>
            <resource-adapter id="wmq-jmsra.rar" statistics-enabled="true">
                <archive>
                    wmq-jmsra.rar
                </archive>
                <config-property name="maxConnections">
                    100
                </config-property>

【讨论】:

以上是关于javax.jms.JMSException:配置超过 50 个资源适配器时出现最大连接数 (50) 错误 - MDB的主要内容,如果未能解决你的问题,请参考以下文章

javax.jms.JMSException: Could not connect to broker URL: tcp://localhost:61616

javax.jms.JMSException:在向JBoss EAP 7.2中的嵌入式ActiveMQ Artemis发送消息时,未能创建会话工厂。

spring jms结合activemq

JMS MQ 绑定问题

记一次CLOSE_WAIT多的故障

导致异常的 IBM 字符集标头