我正在尝试在消息上设置一些标头,该消息在通过我的骆驼 DSL 中的处理器引用时被操纵。然而,我拥有的第一件事是.onCompletion 的处理器,它应该从交换中读取消息,获取标题并记录它们。
这必须在我的 DSL 中排在最后吗?看来我最后的 .process() 处理器可以看到我通过其余代码添加的所有新标头值,但是当我将它们全部记录在 .onCompletion 时,这些标头的值为空。这几乎就像它有一个过时的消息或交换或其他东西。为什么会发生这种情况?
我正在尝试在消息上设置一些标头,该消息在通过我的骆驼 DSL 中的处理器引用时被操纵。然而,我拥有的第一件事是.onCompletion 的处理器,它应该从交换中读取消息,获取标题并记录它们。
这必须在我的 DSL 中排在最后吗?看来我最后的 .process() 处理器可以看到我通过其余代码添加的所有新标头值,但是当我将它们全部记录在 .onCompletion 时,这些标头的值为空。这几乎就像它有一个过时的消息或交换或其他东西。为什么会发生这种情况?
是的,您应该配置诸如
在您的路线开始时。然而 DSL 是 Camel 2.x 非常开放,因此您可以在某些地方在其他地方配置它(例如,不在开始时)。但经验法则是首先做到这一点。然后在那之后,你的常规路线。
旁注:请注意,Camel 还允许您在全局级别(又称上下文范围)而不是路由上配置这些类型。例如,您可以有一个上下文范围的错误处理程序。然后只有在一个特殊的路由覆盖并且有一个路由特殊的错误处理程序。
在 Camel 3.0 以后,我们将使 DSL 更加严格,因此我们在一开始就强制执行配置。这也减少了您在常规路线中的代码帮助列表(例如按 ctrl + 空格)中看到的方法数量。因为这些配置将不再列出。
它们出现的原因是它们继承了同一个基类,这是 DSL 的基石。我们不想在当前的 2.x 行中打破这一点,因为那样有些人可能会受到影响。
订单应该无关紧要...当路线完成时,它应该使用 Exchange 的副本,无论如何...发布您的路线,我们也许可以提供更多帮助