将多条消息插入到 Websphere MQ 的速度非常慢

发布于 2024-12-01 14:45:14 字数 1064 浏览 3 评论 0原文

出于测试目的,我想生成大约一百万条消息到 MQ。但是在 200-300 条消息之后插入变得非常慢,100 条消息插入需要近 30 秒。在 3700 条消息之后,我收到了 MQException(原因 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()

所以主要问题 - 这可能吗 - 快速插入 100 万条消息到 Webspere MQ?以及如何做到这一点?

For testing purpose I want to generate about one million messages to MQ. But after 200-300 messages inserting becomes very slow, near 30 seconds for 100 messages. And after 3700 messages I have got MQException (Reason 2010).

My code in 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()

So main question - do this possible - quickly insert 1 million messages to Webspere MQ? And how to do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

笑梦风尘 2024-12-08 14:45:14

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

在您调用的每次迭代中:

putMsg.writeString(xml);

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

The 2010 reason code is defined in the following constant name: MQRC_DATA_LENGTH_ERROR

In each itereation you call:

putMsg.writeString(xml);

But it is never reset. Looks to me that you keep adding more content to the message and posting it (each message is larger than the previous one).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文