本文介紹了如何控制Spring從隊(duì)列接收的速率?的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!
問(wèn)題描述
我正在使用Spring的消息驅(qū)動(dòng)POJO框架(特別是DefaultMessageListenerContainer
)來(lái)偵聽(tīng)?zhēng)讉€(gè)隊(duì)列和主題。
對(duì)于一個(gè)特定的隊(duì)列,需要減慢我排出隊(duì)列的速度,大約是每五分鐘一條消息。消息的實(shí)際處理是次秒級(jí)操作,但我希望偵聽(tīng)器在消息之間空閑一段時(shí)間。
我創(chuàng)建了一些黑客攻擊,但它顯然不是最優(yōu)的:我所做的是將最大并發(fā)設(shè)置為1,并在處理每條消息之后添加Thread.sleep(..)
。我希望找到一種方法,在兩次嘗試接收之間使用DefaultMessageListenerContainer
進(jìn)行等待,而不是讓處理程序在想要處理消息的過(guò)程中進(jìn)行等待。
我曾考慮過(guò)是否有ScheduledExecutor
會(huì)有幫助,但我意識(shí)到需要在產(chǎn)生任務(wù)的地方進(jìn)行限制。是否有來(lái)自DefaultMessageListenerContainer
的方法可以重寫(xiě)以完成我想要的內(nèi)容?
推薦答案
根據(jù)隊(duì)列的提供商,您可以為使用其隊(duì)列的使用者設(shè)置最大速率。
例如,在hornetQ中,您在連接工廠中使用Consumer-max-rate設(shè)置此設(shè)置。
這篇關(guān)于如何控制Spring從隊(duì)列接收的速率?的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,