我被要求設計和實現一個系統,用於從大量設備接收大量自動化傳感器數據。這些數據將定期生成並作爲xml發送到服務器上。如果設備沒有收到來自服務器的特定確認,設備將繼續重新發送相同的數據。在將數據插入主數據庫中的多個表格之前,需要對這些數據進行一些潛在的繁重處理,另外還需要將一些數據點排入其他外部URL。使用JMS隊列的潛在缺陷?
我正計劃使用一個Java應用程序服務器(傾向於GlassFish)和一個servlet來接收傳入數據。我想實現某種排隊機制來臨時存儲數據,以便返回到傳感器的響應不依賴於所有中間處理。分離的獨立隊列也是數據重定向片的要求。之後做一些研究的兩個主要的選擇似乎是:
1)應用服務器上安裝一個數據庫,並使用表格各種隊列。隊列將由Java應用程序處理,或者在應用程序服務器中運行,或者作爲自己的服務單獨運行。
2)使用數據庫支持的JMS解決方案來實現排隊。
我對JMS並不熟悉,但從我讀過的內容來看,它似乎是這種情況下更好的解決方案。主要要求是傳感器數據在處理之前不會丟失或丟失,並且或多或少地按順序處理。我們還希望在特定時間停止某些隊列的處理,但仍讓他們累積數據並使這些消息永不過期。
隨着戰略1,我很明顯如何滿足這些要求,但它可能不如健壯性和可擴展性,並且比戰略2更復雜,因爲我需要編寫自己的多線程代碼來處理各種獨立隊列。我想知道爲什麼使用JMS隊列可能存在的潛在缺陷,因爲我從來沒有和他們合作過。
,數據安全是一個大問題,所以我需要確保JMS可以保證在重新啓動服務器,停電的情況下,無數據丟失,或者如果隊列中獲得某種原因非常大。例如,在一段時間內完成主數據庫事務的問題可能會導致JVM耗盡內存,崩潰並丟失所有累積的數據? (這將是噩夢場景)。
此外,我想知道是否有任何方法可以通過應用服務器管理工具暫停JMS隊列處理,或者輕鬆看到隊列中有什麼(我將排隊一個對象,這將是消息xml加上一些其他數據,包括收到的時間戳等)。我已經閱讀了幾篇關於相關問題的文章,但希望得到一些直接的反饋。基本上我想知道JMS不是合適的排隊解決方案的實例(如果有的話),以及這是否是其中一種情況。任何意見是極大的讚賞。
根本不是Java的人,但這不意味着等待回覆隊列中的結果迴應?如果你的客戶端協議是HTTP,這看起來會成爲一種破壞行爲。這不會牽扯一個線程嗎? – Bob77
實際上有兩個單獨的排隊場景,我必須處理。一個是到主數據庫的隊列,它將通過jdbc連接池進行連接。這是servlet寫入的內容。另一個將包含這些數據的一個子集,在主隊列中成功處理後,這些數據將被放入這個單獨的隊列中。該隊列的使用者將通過http發送消息到另一個站點。這意味着最初的servlet響應將從http post到第三方站點的結果中被兩個隊列分開。 – user256447