2012-04-10 56 views
3

我們的一個應用程序通過消息隊列接受請求,併爲每個請求撥打電話。如何在Java EE環境中實現請求限制?

有2個電話系統參與撥打電話。人們對可以在一秒鐘內啓動的呼叫次數有限制,但對並行呼叫沒有限制,並且其他系統具有可以在任何時間點處於活動狀態的併發呼叫的限制。

後面的要求在Java EE層中通過具有預定義數量的MDB而不超過限制的消息隊列來處理。

任何人都可以請建議我如何在Java EE層(weblogic 10.3)中實現第一個限制(調用啓動)?

+0

2問題:1.消息排序是否重要? 2.是否要支持集羣環境(每個JVM都存在MDB池)? – home 2012-04-11 05:26:16

+0

消息順序在某種程度上很重要(例如,在20分鐘到期之前以任何順序處理)。我不需要支持羣集。 – Kannan 2012-04-12 12:42:10

回答

0

我想出的唯一想法是讓MDB的數量等於啓動限制,讓他們在呼叫啓動後和獲取下一條消息之前休眠1秒鐘。

在Queue提供程序中可能有一種方法可以實現,不一定通過JMS提供。你必須檢查文檔。

+0

謝謝。在參與系統中有兩個限制,一個用於呼叫發起(例如,每秒2個呼叫),另一個用於最大並行呼叫(任何時候爲100個呼叫),因爲我們需要,所以我將MDB的大小設定爲等於最大並行呼叫減少呼叫發起的數量的最大吞吐量將導致資源利用不足。 – Kannan 2012-04-11 02:27:39

+0

根據我的建議,你將有2個MDB的啓動。每個人都會發起一個呼叫,然後睡一秒鐘。保證在一秒鐘內不會有更多的2。 – 2012-04-11 22:57:23

+0

讓我這樣說,我的應用程序通過隊列接收消息,需要爲接收到的每個msg撥打一個電話。電話系統在任何時間對活動呼叫的數量沒有限制,但對呼叫啓動有限制。例如,我只能在一秒鐘內發起2個呼叫,但一旦啓動,就可以有多少個呼叫。通過將MDB限制爲2,我限制了系統的容量。我正在尋找一種安全的解決方案以用於J2EE環境。請大家幫忙(MDB將在整個通話時間內保持活躍,範圍從10秒到200秒) – Kannan 2012-04-12 14:02:48