MQQueue get方法从远程服务器获取的时间太长

时间:2017-10-21 12:08:32

标签: java performance ibm-mq

我试图从远程队列中读取消息(大约1Mb大小)。方法 queue.get(theMessage,gmo)大约需要3-6秒才能完成。是否有任何选项(如缓冲区大小)来提高性能?

qMgr = new MQQueueManager(qManager);
            int openOptions = CMQC.MQOO_FAIL_IF_QUIESCING | CMQC.MQOO_INPUT_SHARED | CMQC.MQOO_BROWSE;

            MQQueue queue = qMgr.accessQueue(qQueue, openOptions);

            MQMessage theMessage = new MQMessage();

            //theMessage.messageFlags = CMQC.MQMF_SEGMENTATION_ALLOWED;
            MQGetMessageOptions gmo = new MQGetMessageOptions();
            gmo.options = CMQC.MQGMO_LOGICAL_ORDER | CMQC.MQGMO_ALL_SEGMENTS_AVAILABLE | CMQC.MQGMO_COMPLETE_MSG | CMQC.MQGMO_WAIT | CMQC.MQGMO_BROWSE_FIRST;
            gmo.matchOptions = CMQC.MQMO_NONE;
            gmo.waitInterval = 5000;
            queue.get(theMessage, gmo);

2 个答案:

答案 0 :(得分:0)

如果没有具体数据,很难提供建议

MQGMO_LOGICAL_ORDER可以显着影响性能 - 我会测试是否删除它可以提高性能

MQGMO_ALL_SEGMENTS_AVAILABLE似乎无关紧要,因为MQMF_SEGMENTATION_ALLOWED被注释掉了 - 但是如果它被使用它也会影响性能

尝试在服务器和\或客户端运行跟踪,以便更深入地了解需要花费很长时间的内容

答案 1 :(得分:0)

  

Ping远程服务器大约100ms。也许我需要改写我的   多线程的应用程序?

嗯,这可以解释很多。 Ping服务器应该少于5毫秒,接近1毫秒。如果需要100毫秒,那么你的网络很慢,真的很慢。

除了压缩之外,没有任何编程可以解决您的问题。即便如此压缩也不是灵丹妙药。

转到您的网络用户,询问他们两台服务器之间的网络速度是多少。如果他们说它低于1Gb / s,则指出它是21世纪,并且您的应用程序需要至少1Gb / s。