我有一個java程序,200個併發使用者從獨立的HornetQ服務器提供的隊列中讀取數據。監聽者只需從隊列中選取一個項目,隨機等待1.5到2.5秒,然後確認回隊列(它是CLIENT_ACKNOWLEDGE)。HornetQ消費者在關閉連接後需要很長時間才能停止
現在我在隊列中創建20.000條消息,啓動這200位消費者,並在5秒後在連接上調用close(嘗試停止)方法。這時消費者將處理大約1000條消息。但是,除了完成當前的工作並且不再接收隊列,他們還需要3分鐘才能處理另一個大約10.000條消息,然後終止並終止應用程序(connection.close()是阻塞調用)。
我懷疑這可能是由於在客戶端某種緩衝的,我一直在尋找各種方法來限制它,並在出廠配置中設立這四個屬性,以儘可能嚴格:
<producer-window-size>1</producer-window-size>
<consumer-window-size>0</consumer-window-size>
<consumer-max-rate>1</consumer-max-rate>
<producer-max-rate>1</producer-max-rate>
我知道我不一定需要所有這些爲我的情況,但只是想嘗試一切。我知道這些正在註冊,因爲一旦將消費者窗口大小設置爲零,我已經解決了消息順序的另一個問題。
什麼是版本? – 2014-10-07 13:33:31
它的版本是2.2.14 – 2014-10-07 13:40:51