Apache Camel中的嵌入式持久性解决方案,用于保存死信消息

时间:2012-05-25 11:38:23

标签: apache-camel

Camel API附带了嵌入式持久性解决方案吗?我想保存我死信的消息。它可以通过DB或JMS队列完成,但我希望在发送给客户时避免使用它 我在“动作中的骆驼”中读到了关于HawtDB的内容。但它似乎与Aggregator EIP紧密结合。
后来我想创建一份关于所有死信消息的报告并将其显示给客户。

1 个答案:

答案 0 :(得分:1)

您可以使用任何持久性组件来保存您的死信消息(HibernateJPAJDBCDB4O等。在大多数持久性组件的情况下,您不会保存消息本身,而是从中选择(元)数据(除此之外的显着例外是使用DB4O组件)。

例如,如果您要在消息中发送Hibernates实体,则可以使用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);