如何提高在Spring Boot中使用MQ JMS的效率 -Mark Taylor

banq發表於2020-04-03

Spring框架為Java程式使用各種介面提供了簡單的方法。它的JMS元件包括一些類,這些類可幫助程式等待新訊息,類似於訊息驅動Bean。已知使用IBM MQ時,Spring實現的預設行為不是最佳的,我想提高效率。
本文顯示了對Spring Boot和相應的MQ JMS Spring Boot元件的最新改進。他們消除了應用程式開發人員瞭解和編寫程式碼以解決這種低效率的需求。
有關MQ Spring Boot Starter的更多資訊,請參見本文

保羅寫了關於輪詢監聽的行為的詳細資訊,這篇文章。但總而言之,使用Spring DefaultMessageListenerContainer實現輪詢方法來接收JMS訊息。本質上它在做:

 while (no message received) {
    MQGET(wait for receiveTimeout value)
    see if anything else needs to be done
  }


receiveTimeout設定了輪詢迴圈有多快。該值對於處理到達的訊息的響應速度無關緊要,無論設定引數多少,只要輸入佇列中有可用的訊息,便會立即讀取該訊息。但是,將其設定為高值將意味著可能需要處理的其他事情(例如,Spring Framework可能正在尋找關閉請求)會延遲到計時器到期為止。因此,調值非常重要。預設值為1秒,這可能意味著發出的MQGET數量遠遠超過期望的數量。

Spring Boot版本2.2.0以上半比可以為JMS偵聽器設定外部計時引數:spring.jms.listener.receive-timeout=30s,在屬性檔案中設定。

MQ Spring Boot 2.2.0版將檢測spring.jms.listener.receive-timeout是否存在外部屬性配置,如果找到,則將使用新值。如果未設定,則該值將自動從1s更改為30s。當然,如果應用程式程式碼稍後再設定該值,則優先使用該值。

如果將Spring Boot與MQ JMS一起使用,則現在可以更好地利用MQ資源,而無需進行應用程式更改。現有應用程式僅透過使用當前版本的mq-jms-spring-boot-starter進行構建即可自動獲得此增強。

相關文章