2010-05-23 34 views

回答

0

做到這一點的最好方法是使用您的中間件提供商提供的任何跟蹤工具。或者可能的話,您可以設置一箇中間監聽器,其唯一的工作就是記錄消息並轉發到您的現有應用程序。

在大多數情況下,您會發現中間件提供程序已能夠爲您執行此操作,而不會導致應用程序發生任何更改或意識。

2

可以

  • 存儲在內存中 - 在收集或在內存數據庫
  • 在一個獨立的數據庫
1

您可以創建一個數據庫日誌表中的消息,將消息按原樣存儲在BLOB列中,將其創建/發佈到MQ的時間戳和作爲主鍵的簡單計數器。如果要爲發送的消息創建統計報告,還可以添加字段,如消息類型等。

只需通過使用timestamp列刪除比保留期更早的所有消息即可清理tabe。

1

我在過去實現了這樣的解決方案,我們選擇將具有所有特徵的消息存儲在數據庫中,並在其上開發了一個搜索,重放和取消應用程序。這是Message Store模式:

alt text http://www.eaipatterns.com/img/MessageStore.gif

我們還使用此應用程序Dead Letter Channel

alt text http://www.eaipatterns.com/img/DeadLetterChannelSolution.gif

如果你不希望建立一個定製的解決方案,看看在ReplayService for JMS從CodeStreet。

0

我會將隊列更改爲主題,然後保留處理消息的原始消費者,並添加另一個消費者以審覈消息到數據庫。

某些JMS提供程序可以滿足主題到隊列橋的定義,然後用戶可以從它們自己的專用隊列中接收信息,並且不必讀取由於其他消費者處於非活動狀態而留在隊列中的過去的消息。

或者,您可以編寫一個log4j appender,它將記錄的消息寫入數據庫。

+0

或者使用[Wire Tap](http://www.eaipatterns.com/WireTap.html) – 2010-05-23 12:13:19