【问题标题】:Why connection.close() not closing out the MQ connection?为什么 connection.close() 没有关闭 MQ 连接?
【发布时间】:2022-06-24 17:52:10
【问题描述】:

我正在使用 connection.start() 来启动连接,并使用 consumer.receive() 来接收来自队列的消息。但是在关闭连接时,它无法使用 connection.close() 关闭连接。因此,它会耗尽连接限制并引发队列管理器不可用的异常。

这背后的原因是什么?以及如何解决?

    connectionWMQ = connectionFactory.CreateConnection();
    connectionWMQ.ExceptionListener = new ExceptionListener(OnXMSException);

    // Create session
    ISession sessionWMQ = connectionWMQ.CreateSession(false, AcknowledgeMode.AutoAcknowledge);

    IDestination destination = sessionWMQ.CreateQueue("QueueName");
    IMessageConsumer consumer=sessionWMQ.CreateConsumer(destination);
    try{
         connectionWMQ.Start();
         var message=(IMessage)Consumer.Receive(TIMEOUTTIME);
         //decoding the msg;

         connectionWMQ.Close();
       }
  catch(Exception ex){
       }

【问题讨论】:

  • 查看您提到的方法名称,您正在使用 XMS。网络核心。什么是版本? connection.close() 关闭在该连接下创建的所有打开对象——即消费者、生产者和会话。由于某种原因,您的应用程序中可能没有调用 connection.close !你能用代码更新问题吗?
  • @Shashi 我使用的是 IBM XMS 版本 9.2.0.4。我已经测试过,每次打开连接以接收消息时它都会调用 connection.close()。
  • 连接打开和关闭的频率如何?您是否对每条消费的消息都这样做?
  • @Shashi 是的。我正在使用 Windows 服务。
  • 解决方案是什么。你可以自己写答案。

标签: .net-core ibm-mq xms


【解决方案1】:

在 connectionFactory.CreateConnection() 成功完成后,您需要确保最终关闭连接。您提供的代码不能保证这一点,有些调用可能会失败,结果它会跳过关闭连接。 例如,您可以将 CreateConnection() 后面的所有内容移动到 try 块中,并将 close() 调用移动到相应的 finally 块中。

【讨论】:

    猜你喜欢
    • 2015-12-16
    • 1970-01-01
    • 2021-02-13
    • 2020-07-09
    • 2016-11-21
    • 2019-02-01
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多