如何将来自外部系统的所有传入消息保存在 Camel 中

Posted

技术标签:

【中文标题】如何将来自外部系统的所有传入消息保存在 Camel 中【英文标题】:How to keep in Camel all incoming messages from an external system 【发布时间】:2012-12-31 03:18:39 【问题描述】:

亲爱的骆驼骑士们!

我想问你是否知道任何推荐的方法来保存/存储来自肥皂、休息等的所有传入消息......

使用当前拦截器:

a) org.apache.camel.spi.InterceptStrategy
b) tag  interceptFrom

我无法区分传入的消息是来自主路由(由外部客户端调用)还是来自嵌套路由。

此外,UnitOfWork 类方法不提供对父级 originalInMessage 的任何访问,因此在处理器中我也遇到了困难。

这是我想要实现的一个小的视觉解释:

感谢您的任何建议, 安德烈

【问题讨论】:

【参考方案1】:

除非您尝试针对具有大量路由的现有应用程序进行重构,否则我不会使用拦截器...

相反,只需将原始消息保留在 Exchange 属性或消息头(以及任何其他消息源属性等)中,并创建一个简单的 KEEP 处理器来检索数据等。

【讨论】:

Helo Boda,感谢您的快速回答!是的,你是对的,这也是可能的解决方案,但问题是我们不想在所有传入路由中明确使用 KEEP 处理器,因为我们将我们的骆驼配置暴露给客户,这可能会忘记指定它,而不是影响是相当大的 - 丢失的消息和抱怨......那么你看到任何其他解决方案吗? 您可以使用 interceptFrom() 来应用许多不需要显式修改它们的路由,但这也需要在与路由相同的 CamelContext/RouteBuilder 中定义......所以它您的客户等仍然可以看到。我能想到的唯一其他选择是在发送到您的客户路由等之前代理所有请求(并记录它们)......

以上是关于如何将来自外部系统的所有传入消息保存在 Camel 中的主要内容,如果未能解决你的问题,请参考以下文章

Camel Restlet异步发送对客户端的响应

EIP/Apache Camel - 如何同时处理消息,但每个组原子处理?

当异常消息转到camel中的deadLetterChannel时,如何将MultipartEntityBuilder转换为inputStream?

Spring Integration 与 Camel [关闭]

发生错误时如何暂停或减少 Camel Hazelcast SEDA 消费者的吞吐量

Apache Camel 生产者和消费者