MQQueue get方法从远程服务器上花费太长时间
我试图从远程队列中读取消息(大约1Mb大小)。方法queue.get(theMessage,gmo)需要大约3-6秒才能完成。是否有任何选项(如缓冲区大小)来提高性能?MQQueue get方法从远程服务器上花费太长时间
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);
很难没有具体数据
给予建议的MQGMO_LOGICAL_ORDER会影响性能自动significntly - 如果移除它提高perfomence作为MQMF_SEGMENTATION_ALLOWED被注释掉
MQGMO_ALL_SEGMENTS_AVAILABLE似乎不相干的我会测试 - 但如果它是使用它也会影响性能
也尝试在服务器和/或客户端上运行跟踪以获得有关需要多长时间的更多信息
当应用程序与Websphere MQ运行同一台机器时,不存在性能问题。和时间得到消息不影响队列3000或1的多少邮件 – loljeene
Ping到远程服务器大约100ms。也许我需要用多线程重写我的 应用程序?
那么,这将解释很多。 Ping一台服务器应该少于5ms,接近1ms。如果需要100ms,那么你的网络很慢,真的很慢。
除了压缩之外,没有任何编程能够解决您的问题。即使如此,压缩也不是什么灵丹妙药。
转到您的网络人员,询问他们两个服务器之间的网络速度。如果他们说它低于1Gb/s,那么就指出这是21世纪,你的应用要求至少1Gb/s。
消息是否持久? – JoshMc
是的。消息持续。 Ping到远程服务器大约100ms。也许我需要用多线程重写我的应用程序? – loljeene
您使用的是MQ服务器和客户端的哪个版本和修订包级别? – JasonE