出于测试目的,我想向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万条消息吗?怎么做?
答案 0 :(得分:2)
2010年原因代码在以下常量名称中定义:MQRC_DATA_LENGTH_ERROR
在每次迭代中,您都会调用:
putMsg.writeString(xml);
但它永远不会重置。在我看来,您不断向邮件添加更多内容并将其发布(每封邮件都比前一封邮件大)。