向Websphere MQ插入多个消息非常慢

时间:2011-08-25 21:53:47

标签: ibm-mq

出于测试目的,我想向MQ生成大约一百万条消息。但是200-300之后插入的消息变得非常慢,100条消息接近30秒。在3700条消息之后,我得到了MQException(Reason 2010)。

我在groovy的代码

import com.ibm.mq.*

MQEnvironment.@hostname = "srv-cci2"
MQEnvironment.@port = 1414
MQEnvironment.@channel = "SYSTEM.ADMIN.SVRCONN"
MQEnvironment.disableTracing();
MQException.log = null;

def queueManager = new MQQueueManager("QM_srv_cci2")

int putOpenOpts = MQC.MQOO_OUTPUT | MQC.MQOO_FAIL_IF_QUIESCING;

def putMsg = new MQMessage();
putMsg.setVersion(MQC.MQMD_VERSION_2);
putMsg.format = MQC.MQFMT_STRING;
putMsg.characterSet = 1250;


def xml = """<?xml version="1.0" encoding="windows-1250"?>

"""

for (int i = 1; i < 1000000; i++) {
    def putQ = queueManager.accessQueue("SOA_EVENT.IN", putOpenOpts);
    putMsg.writeString(xml);
    def pmo = new MQPutMessageOptions();
    putQ.put(putMsg, pmo);
    putQ.close()

    if (i % 100 == 0) {
        println ("" + new Date() + " " + i)
    }
}

queueManager.disconnect()

所以主要问题 - 这样做可能 - 快速向Webspere MQ插入100万条消息吗?怎么做?

1 个答案:

答案 0 :(得分:2)

2010年原因代码在以下常量名称中定义:MQRC_DATA_LENGTH_ERROR

在每次迭代中,您都会调用:

putMsg.writeString(xml);

但它永远不会重置。在我看来,您不断向邮件添加更多内容并将其发布(每封邮件都比前一封邮件大)。