【问题标题】:Connection leak with IBM MQ from JbossJboss 与 IBM MQ 的连接泄漏
【发布时间】:2018-09-18 14:00:07
【问题描述】:

在我的 JavaEE 应用程序中,我通过以下方式从 IBM MQ 队列中读取消息:

 @TransactionAttribute(TransactionAttributeType.REQUIRED)
 public class MyMessageHandler implements MessageListener  {
 @Resource
 private MessageDrivenContext context;

 @Override
 public void onMessage(Message message) {
    try {
        processMessage(message);

    }
    catch (Exception e) {
        context.setRollbackOnly();
    }       
}

应用部署在 Jboss EAP 6.4 上,使用 wmq.jms.rar 适配器(Implementation-Version: 7.1.0.0-k000-L111005)。 这是来自 ejb-jar.xml 的激活配置:

<message-driven>
    <display-name>MyMessageHandler</display-name>
    <ejb-name>MyMessageHandler</ejb-name>
    <ejb-class>org.example.MyMessageHandler</ejb-class>
    <transaction-type>Container</transaction-type>
    <activation-config>
        <activation-config-property>
            <activation-config-property-name>hostName</activation-config-property-name>
            <activation-config-property-value>${somejbossproperty}</activation-config-property-value>
        </activation-config-property>
        <activation-config-property>
            <activation-config-property-name>port</activation-config-property-name>
            <activation-config-property-value>${somejbossproperty}</activation-config-property-value>
        </activation-config-property>
        <activation-config-property>
            <activation-config-property-name>channel</activation-config-property-name>
            <activation-config-property-value>${somejbossproperty}</activation-config-property-value>
        </activation-config-property>
        <activation-config-property>
            <activation-config-property-name>queueManager</activation-config-property-name>
            <activation-config-property-value>${somejbossproperty}</activation-config-property-value>
        </activation-config-property>
        <activation-config-property>
            <activation-config-property-name>transportType</activation-config-property-name>
            <activation-config-property-value>${somejbossproperty}</activation-config-property-value>
        </activation-config-property>
        <activation-config-property>
            <activation-config-property-name>username</activation-config-property-name>
            <activation-config-property-value>${somejbossproperty}</activation-config-property-value>
        </activation-config-property>
        <activation-config-property>
            <activation-config-property-name>password</activation-config-property-name>
            <activation-config-property-value>${somejbossproperty}</activation-config-property-value>
        </activation-config-property>
        <activation-config-property>
            <activation-config-property-name>destinationType</activation-config-property-name>
            <activation-config-property-value>javax.jms.Queue</activation-config-property-value>
        </activation-config-property>
        <activation-config-property>
            <activation-config-property-name>destination</activation-config-property-name>
            <activation-config-property-value>${somejbossproperty}</activation-config-property-value>
        </activation-config-property>
        <activation-config-property>
            <activation-config-property-name>acknowledgeMode</activation-config-property-name>
            <activation-config-property-value>auto-acknowledge</activation-config-property-value>
        </activation-config-property>
    </activation-config>
</message-driven>

当抛出异常时,事务会回滚,并使用 IBM MQ 回退机制将消息放入 IBM MQ 回退队列。但是,我注意到连接数量有所增长,并且它们没有被释放。 这就是我在 IBM MQ 服务器上监控连接数的方式:

echo "display conn(*) all" | runmqsc <queue manager name> | grep <the IP of the Jboss server>| wc -l

为什么会这样?

【问题讨论】:

    标签: jms ibm-mq jboss6.x


    【解决方案1】:

    问题似乎是由于 wmq.jms.rar-adapter 的版本所致。当我们升级到较新的版本(7.5.0.9-p750-009-180830)时,连接泄漏停止了。

    【讨论】:

    • 您能否提供您使用的有问题的版本以及为解决问题而升级到的版本?
    • 我们遇到了实施版本:7.1.0.0-k000-L111005.1 的问题,我们升级到实施版本:7.5.0.9-p750-009-180830
    • 感谢您的更新,但如果您编辑问题以放入原始问题版本并编辑答案以说明版本,将来的人们会更喜欢找到此问题和答案你升级到。我知道在搜索 cmets 时不会搜索。
    • 还请注意,一般来说,这两个版本都不再支持,7.1 于 2017 年 4 月 30 日停止支持,7.5 于 2018 年 4 月 30 日停止支持(7.5.0.9 几天前刚刚发布并且将是 7.5.0.9 的最后一个版本)。您最好迁移到 v8.0(宣布将于 2020 年 4 月 30 日终止支持)、v9.0 或 v9.1。
    • 它现在是基本客户端的一部分,因此不需要任何额外的东西。
    猜你喜欢
    • 1970-01-01
    • 2020-09-18
    • 2015-01-24
    • 1970-01-01
    • 1970-01-01
    • 2016-11-28
    • 2016-01-21
    • 1970-01-01
    • 2022-11-08
    相关资源
    最近更新 更多