2013-05-22 39 views
0

我有一個使用某些文本消息網關的場景,我通過GET在servlet中接收傳入消息,編寫答覆消息,將其存儲在數據庫中,並使用id鍵發送出去,然後使用相應的服務。郵件發送結果通過POST發送給我(郵件ID和文本結果(成功或失敗))。文本消息隊列實現的設計決策

所以,我想實現的是消息隊列:在發生故障的情況下,用固定的重試次數一個一個地發送消息。

我不能只是想辦法實施它的權利。這就是我剛纔所看到的 - 例如,在消息處理程序的doGet方法中,我接收到新消息,組成答覆,將答覆消息存儲到數據庫,然後將其放入單例隊列中,以便在時間內發送消息。然後我可以用run()方法創建某種線程,它只是在無限循環中一個接一個地從隊列中接收消息並嘗試發送一定的時間(比如5)。

如果消息發送成功 - 那麼我需要的是從隊列中刪除消息並打破內部循環。

這裏是棘手的部分,我卡住了 - 如何在線程中決定郵件是否成功發送,如果我通過POST在serlvet(郵件ID和結果)中得到結果?

我可以存儲當前我嘗試發送的消息的當前ID,但這並不能讓事情變得更加清晰。

因此,我所關心的是根據我的情況實現消息隊列的最佳方式是什麼? 我並不是說我所提出的設計決定在任何方面都是足夠的,需要留下來。我會很感激任何幫助 - 無論是提出改進我看到解決我提到的問題的實施方式的建議,還是提出某種全新的更適合的方法,這都會非常受歡迎。

非常感謝您提前!

回答

0

您可以使用一些外部手段來存儲消息的狀態,例如數據庫。 POST處理程序將使用成功或失敗條件更新數據庫,並且消息隊列可以查詢數據庫的狀態。

+0

謝謝!這幾乎解決了我的問題,我只有一個問題 - 我想,在查詢數據庫之前我需要一些延遲 - 等待POST來更新數據庫,我是否正確?如果是這樣,處理它的最好方法是什麼? – user1834170

+0

您還可以存儲隊列上次嘗試發送消息的時間。每次您檢查隊列頭是否已成功接收,還要檢查最近一次發送消息是否最近發送,如果是,則將其降至隊列的後面。 – nitegazer2003

+0

適合我,非常感謝您的幫助! – user1834170