2011-05-27 98 views
1

我有一個方法在鎖定(ReentrantLock)這種方法發送一些消息到服務器,立即接收響應和創建/保存數據庫中的數據。 此響應具有發送消息的標識。客戶端有一個正在等待服務器報告的偵聽器(這個報告可以在數據發送到服務器之後返回),服務器也可以返回某種報告(帶有id和一些狀態),並且我需要將該報告(通過id)映射到該記錄的先前保存的記錄和更改狀態字段。不同線程之間的數據共享

問題是這個報告可以更快地返回(並且偵聽器會抓住它並嘗試處理),那麼來自第一個方法的消息被保存在數據庫中。 解決這個問題的方法是什麼?

我曾想過在數據庫中創建附加表並將消息中的數據保存在一個表中,並將數據從報告保存到其他表中。然後通過其他進程同步它們,但是也許可以創建一些緩衝區/隊列,其中消息ID將從第一個方法存儲,並且當我們接收到報告時,我們將檢查該緩衝區/隊列是否存在相應的消息ID,如果我們發現該消息編號,那麼報告監聽器將繼續它的工作?

回答

3

我認爲最好將報告和消息分開存儲在數據庫中,並在稍後將其鏈接起來。假設你的數據庫做了它的工作,這減少了數據丟失的可能性。另外,你讓數據庫完成鎖定/同步的艱鉅任務,通常他們在這方面非常擅長。

0

我會將數據存儲在數據庫中,當您想要發送消息到另一個系統來讀取數據時,請使用JMS發送消息。這樣,您可以確保當第二個系統收到消息時所有數據都可用。第二個系統只需要收聽消息。