3

这可能是一个愚蠢的问题,但是说我有一个非常重要的信息,我想用 Camel 处理。我的路线中的步数将如何影响内存使用?骆驼是否会为路由中的每个步骤深度复制我的消息有效负载,即使 DSL 步骤仅从消息中读取,或者它是否在这里做了一些聪明的事情?

保持路由向下并在“hughe” bean 中处理大型消息是否更好?

这是一个示例路由,它执行各种操作,但不更改有效负载。

from("foo:bar")
  .log(..)
  .setProperty(..)
  .setHeader(..)
  .log(..)
  .choice()
    .when(simple(... ) ) 
      .log(..)
      .to(..)
    .when(simple(..))
      .log(..)
      .to(..)
  .end()
4

2 回答 2

2

据我了解,对于这样一个简单的流水线路线,会创建一个包含主体的 Exchange,并沿着路线中的每一步传递。其他 EIP 确实会导致 Exchange 被复制(如多播、窃听等)......

同样,如果您在与外部资源交互的过程中有步骤,这可能导致不必要的主体的任何类型的复制/克隆/转换/序列化,那么您可以使用诸如声明检查模式之类的东西来减少这种情况。

于 2012-10-18T19:42:02.587 回答
2

通过在步骤中复制或重新创建消息对象的路线,骆驼交换是相同的。身体只是被引用了。所以通常你不应该有问题。

这是由每个骆驼处理器单独处理的。所以一些处理器可能会复制身体。通常这是处理器真正在身体上工作的情况。所以在这种情况下是无法避免的。

于 2012-10-20T08:03:03.383 回答