0
我正在使用Glassfish 3.1.1,結合使用EJB 3.1體系結構和smack庫來處理傳入的XMPP數據包。每個發件人的消息隊列
爲此,我有一個從Singleton處理我的傳入數據包的線程。
Packet packet = collector.nextResult();
if (packet != null)
processPacket(packet); // here i lookup my processing EJB and start working
我所需要的是,其在一個時間排隊分組以每發送方處理一個分組的隊列。目前,我並行處理每個收到的數據包,這使我無法保持數據包的順序。
任何想法如何我可以儘可能優雅地解決這個問題?
問候中號
PS:第一種方法是存儲該客戶端處理的時刻數據包,我遍歷收集的數據包並找出不處理任何發件人。但是,如果緩衝區中沒有數據包被允許處理,恐怕這會花費很多次迭代。
我之前嘗試過PacketListener,但我更喜歡PacketCollector,因爲當我想停止處理數據包時,我有更多的控制權。在heaver負載下,數據包監聽器一直調用回調函數,直到它的緩衝區爲空,即使我取消了它。通過收集器,我還可以通過獲取排隊數據包的數量(反射)來確定其健康狀態。但不管怎麼說。當我收到新包時,我需要爲每個客戶端高效排隊。你有什麼想法嗎?我在PS中張貼了我的第一個方法。 – mkuff 2012-04-20 07:10:31