2

Camel API 是否附带任何嵌入式持久性解决方案?我想保存我的死信消息。它可以通过 DB 或 JMS 队列完成,但我想在运送给客户时避免它。
我在“行动中的骆驼”中读到了 HawtDB。但它似乎与聚合器 EIP 紧密耦合。
稍后我想创建一个关于所有死信消息的报告并将其显示给客户。

4

1 回答 1

2

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

例如,如果您在消息中发送 Hibernates 实体,则可以使用Hibernate 组件

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

如果您无法预测将向死信队列发送什么样的类,请考虑使用DB4O 组件。DB4O 在这方面非常灵活,因为它允许您将任何 Java 对象存储在队列中(无需显式映射,如在 Hibernate 或 JPA 的情况下)。

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

创建嵌入式 DB40 容器也非常简单:

ObjectContainer db = Db4oEmbedded.openFile(Db4oEmbedded.newConfiguration(), DB4OFILENAME);
于 2012-05-25T12:48:24.710 回答