2011-06-10 185 views
2

我正在使用ActiveMQ,Spring。跟蹤處理的jms消息

有什麼方法可以跟蹤所有處理的消息。我必須跟蹤所有消息已被處理。我也想在稍後階段查看這些處理過的消息。

  • 我應該使用數據庫嗎?
  • 有沒有什麼好的庫,可以使這種操作簡便
  • 我不想讓表數據庫中每一種模型對象的
+1

你需要有人來提供答案提供更多的細節。這聽起來像某種類型的審計是你想要的。 'Keep Track'非常模糊。您可以將消息放入日誌中。您還可以通過在每個處理階段將有效負載或整個消息序列化到數據庫字段來避免大量的數據庫表。 – nsfyn55 2011-06-10 14:27:49

回答

1

在一般情況下,我建議你要麼記錄和/或將消息記錄到數據庫中。如果您以後只想查看這些消息,簡單的日誌記錄就足夠了。如果您需要通過UI進行事務性彙總/搜索,那麼數據庫會更好。

但是,您也可以通過ActiveMQ虛擬目標實現您想要的目標。藉此,您可以將1個目的地轉發到另外2個目的地。然後,您的應用程序可以在1個目的地上收聽,並且該消息的副本將放在另一個上以供您查看。例如:

<broker persistent="false" useJmx="false" xmlns="http://activemq.apache.org/schema/core"> 
    <destinationInterceptors> 
     <virtualDestinationInterceptor> 
     <virtualDestinations> 
      <compositeQueue name="MY.QUEUE"> 
      <forwardTo> 
       <queue physicalName="MY.QUEUE.PROCESS" /> 
       <topic physicalName="MY.QUEUE.REVIEW" /> 
      </forwardTo> 
      </compositeQueue> 
     </virtualDestinations> 
     </virtualDestinationInterceptor> 
    </destinationInterceptors> 

    </broker> 

將定義一個隊列MY.QUEUE,其中每個消息將在兩個.PROCESS和。回顧隊列結束。

+0

我能讀取實現的所有消息嗎? – Kartik 2011-06-10 14:40:52

1
  1. 我會使用數據庫。
  2. 也許你可以使用像Hibernate這樣的ORM,但JDBC或SpringTemplates可能會更好。
  3. 與其爲每個模型對象創建一個單獨的表,創建一個「消息」表並將非常見部分序列化爲一個有效載荷blob(或文本)。然後,您可以使用實用程序將消息反序列化以便以後查看(或播放)。
0

卡爾蒂克,

這是一個良好的編程問題,但它更多的應該怎麼計劃的問題,而不是「我怎樣才能做到這一點」的問題。很難回答「我應該編程的問題是什麼」,因爲你應該編程的東西直接取決於你需要的東西。充其量,我們只能猜測你真正需要什麼。

如果您需要更新已處理的JMS消息,那麼數據庫將使其更容易更新。如果您需要證明沒有人更新「記錄」條目,那麼數據庫可能無法完成這項工作。

假設這個日誌用於查看哪些非常緩慢的進程消息仍然需要完成。然後,數據庫將提供簡單的搜索,只要搜索者知道SQL。但是,如果日誌更多是歸檔文件,那麼數據庫只會增加整個流程的開銷,結構化文件將會執行。

在Java中有用於寫入和檢索到數據庫的JDBC,並且它不是一個難以使用的API。再次,還有一些體面的日誌框架,當然總是有FileOutputStream。在不知道如何使用這個日誌的情況下,很難確定哪些技術真的是過度殺傷,同樣也不可能知道哪些技術不夠好。

返回並查看日誌的使用方式,然後評估數據庫提供的功能是否過度。

乾杯, 埃德