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); 
+0

消息是否持久? – JoshMc

+0

是的。消息持续。 Ping到远程服务器大约100ms。也许我需要用多线程重写我的应用程序? – loljeene

+0

您使用的是MQ服务器和客户端的哪个版本和修订包级别? – JasonE

很难没有具体数据

给予建议

的MQGMO_LOGICAL_ORDER会影响性能自动significntly - 如果移除它提高perfomence作为MQMF_SEGMENTATION_ALLOWED被注释掉

MQGMO_ALL_SEGMENTS_AVAILABLE似乎不相干的我会测试 - 但如果它是使用它也会影响性能

也尝试在服务器和/或客户端上运行跟踪以获得有关需要多长时间的更多信息

+0

当应用程序与Websphere MQ运行同一台机器时,不存在性能问题。和时间得到消息不影响队列3000或1的多少邮件 – loljeene

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

那么,这将解释很多。 Ping一台服务器应该少于5ms,接近1ms。如果需要100ms,那么你的网络很慢,真的很慢。

除了压缩之外,没有任何编程能够解决您的问题。即使如此,压缩也不是什么灵丹妙药。

转到您的网络人员,询问他们两个服务器之间的网络速度。如果他们说它低于1Gb/s,那么就指出这是21世纪,你的应用要求至少1Gb/s。

+0

嗨罗杰,距离在毫秒响应时间中起着重要作用。你无法加快光速。尝试从AMRS ping到EMEA或ASIA,看看你的ms响应时间是多少,即使链路速度是10 Gb/s,它也会大于1ms到5ms。 – JoshMc

+0

当然,我在我的服务器位于俄罗斯有1Gb频道。 MQ服务器位于美国。我尝试使用FTP服务器来测量服务器之间的速度。大文件大约需要3-5MB。 – loljeene

+0

@JoshMc好吧,我想更像是250英里而不是5000英里。 – Roger