达到最大q深度时的queueSender.send

时间:2014-10-21 08:11:31

标签: ibm-mq

我正在使用queueSender.send(msg)将消息发送到目标q。这里q会话不是事务性的,而queueSender的传递模式是默认模式[我相信默认是PERSISTENT]。如果应用程序在q达到最大q深度时仍在发送消息,将会发生什么。应用程序性能有任何问题吗?处理这个问题的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

  1. 性能转动接收应用程序以确保它跟上消息流。
  2. 将接收应用程序的队列从默认深度5000增加到200000(或一些非常大的值)
  3. 确保发送应用程序可以处理原因代码2053(MQRC_Q_FULL)。即暂停应用程序或将消息放入另一个队列。
  4. 更新:

    如果在将消息放入完整队列时使用JMS,则会出现JMS异常:JMSWMQ2007。如果JMSException不为null,则获取LinkedException。 即。

    catch (JMSException e)
    {
       System.err.println(e.getLocalizedMessage());
       if (e != null)
          System.err.println("getLinkedException()=" + e.getLinkedException());
    }
    

    错误消息应如下所示:

      

    JMSWMQ2007:无法向目标“TEST.Q25”发送消息。   getLinkedException()= com.ibm.mq.MQException:JMSCMQ0001:WebSphere MQ   调用失败,编译'2'('MQCC_FAILED')原因'2053'   ( 'MQRC_Q_FULL')。

答案 1 :(得分:0)

求maxdepth(最大队列深度)参数的值

display qlocal(<QUEUENAME>)

更改最大深度值 (0-999999999)

alter qlocal(<QUEUENAME>) maxdepth(<DEPTH>)