2017-10-21 183 views
0

我試圖從遠程隊列中讀取消息(大約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

回答

0

很難沒有具體數據

給予建議

的MQGMO_LOGICAL_ORDER會影響性能自動significntly - 如果移除它提高perfomence作爲MQMF_SEGMENTATION_ALLOWED被註釋掉

MQGMO_ALL_SEGMENTS_AVAILABLE似乎不相干的我會測試 - 但如果它是使用它也會影響性能

也嘗試在服務器和/或客戶端上運行跟蹤以獲得有關需要多長時間的更多信息

+0

當應用程序與Websphere MQ運行同一臺機器時,不存在性能問題。和時間得到消息不影響隊列3000或1的多少郵件 – loljeene

0

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

相關問題