簡體   English   中英

如何限制大量隊列的活動JMS偵聽器?

[英]How to limit the active JMS listeners for a lot queues?

以我為例,假設有50個JMS隊列接收不同類型的消息。

如果我實現了50個JMS偵聽器(每個隊列一個),那么它工作得很好。

但是,當所有50個隊列中都有許多待處理消息時,我的所有50個JMS偵聽器都在同時工作(即,將有50個JAVA線程在工作)。 這使我的服務器過載(如果它的RAM資源非常有限並且很容易內存不足)。

因此,我在考慮是否可以限制活躍聽眾的人數。 假設一次最多只能有10個活動的偵聽器。 有時偵聽器01〜10在隊列01〜10上工作,有時偵聽器11〜20可以在隊列11〜20上工作等等。

即使有新消息進入隊列01〜10,偵聽器01〜10也應該能夠休眠一段時間,並讓其他偵聽器工作。

我該如何解決這種情況?

通常,每個隊列只有一個偵聽器,因此除非您要管理偵聽器的活動/非活動狀態,否則每次將消息傳遞到隊列時,您都會獲得一個正在運行的線程。

無論消息傳遞到何處,您都需要一種管理擴展的方法。 我想到兩個想法:

1)消息處理是否需要一些可以以某種方式共享的占用大量內存的資源? 例如,數據庫連接通常被共享/合並,以避免創建過多的連接(盡管連接過多通常是服務器端的問題,也許還有其他資源需要共享)。

2)使用信號量,通過讓每個線程在開始之前從信號量獲得許可,並在最后將其返回,來限制並發線程的數量(非常重要!)。 然后,如果收到大量並發消息,則僅n個消息被並發處理,另一個在消息的偵聽器處理程序中排隊。

3)您可以將消息聚合到具有偵聽器進行處理的新隊列中。 隊列1-10的偵聽器將消息發布到newQueue1,隊列11-20的偵聽器將消息發布到newQueue2,依此類推,然后讓偵聽器在newQueue1,newQueue2等上工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM