2012-05-25 59 views
1

Camel API中是否提供了嵌入式持久性解決方案?我想保存我的死信信息。它可以通過數據庫或JMS隊列完成,但是我想在發送給客戶端時避免它。
我在'Camel In Action'中閱讀了關於HawtDB的內容。但它似乎與Aggregator EIP緊密結合。
稍後,我想創建一份關於所有死信消息的報告並將其顯示給客戶端。Apache Camel中的嵌入式持久性解決方案可保存無效的消息

+0

@HenrykKonsek你是那麼慷慨。我一定會向您發送我的Fuse ESB相關的SO問題。 –

回答

1

您可以使用任何持久性組件來保存您的死信消息(Hibernate,JPA,JDBC,, DB4O等)。在大多數持久性組件的情況下,您不會保存消息本身,而是從中選擇(元)數據(值得注意的例外是使用DB4O組件)。

例如,如果你在郵件中發送Hibernate的實體,您可以使用Hibernate component

from("seda:deadMessageStore"). 
    setBody().groovy("new DeadMessageLog(request.headers, request.body) "). 
    to("hibernate:com.foo.DeadMessageLog"); 
errorHandler(deadLetterChannel("seda:deadMessageStore")); 

如果你無法預知你會發送到死信隊列什麼樣的課程,可以考慮使用DB4O component。 DB4O在這方面非常靈活,因爲它允許將任何Java對象存儲在隊列中(沒有顯式映射,就像Hibernate或JPA一樣)。

// store any Java object without transformations 
errorHandler(deadLetterChannel("db4o:java.lang.Object")) 

也造成嵌入式DB40容器是非常簡單的:

ObjectContainer db = Db4oEmbedded.openFile(Db4oEmbedded.newConfiguration(), DB4OFILENAME); 
+0

但他們都將是外部數據庫。不是嗎?我需要請客戶在​​那裏爲死信信息數據庫創建一個單獨的表。我試圖避免它,並提供駱駝作爲簡單的可插拔解決方案。 –

+0

DB4O允許您存儲到文件系統。與使用SQLLite驅動程序的Hibernate一樣。 –

+0

@HenryKonsek HawtDBAggregationRepository怎麼樣?它現在正在閱讀關於此選項的信息。 –

相關問題