Camel API附带了嵌入式持久性解决方案吗?我想保存我死信的消息。它可以通过DB或JMS队列完成,但我希望在发送给客户时避免使用它
我在“动作中的骆驼”中读到了关于HawtDB的内容。但它似乎与Aggregator EIP紧密结合。
后来我想创建一份关于所有死信消息的报告并将其显示给客户。
答案 0 :(得分:1)
您可以使用任何持久性组件来保存您的死信消息(Hibernate,JPA,JDBC,DB4O等。在大多数持久性组件的情况下,您不会保存消息本身,而是从中选择(元)数据(除此之外的显着例外是使用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);