我试图在一条消息上设置一些 header ,这些消息在通过我的 Camel DSL 中的处理器引用时被操纵。然而,我拥有的第一件事是 .onCompletion 的处理器,它应该从交换中读取消息,获取 header 并记录它们。
在我的 DSL 中它必须排在最后吗?看来我的最终 .process() 处理器可以看到我通过其余代码添加的所有新 header 值,但是当我在 .onCompletion 中记录它们时,这些 header 的值为空。它几乎就像它有一个陈旧的消息或交换版本或其他东西。不然为什么会这样?
最佳答案
是的,你应该配置这样的东西
- 完成
- 异常
- 拦截
- 错误处理器
- 交易
- 政策
- 等等
在您的路线的起点。然而,DSL 是 Camel 2.x 非常开放,因此您可以在某些地方在其他地方配置它(例如,不在开始)。但经验法则是首先执行此操作。然后是常规路线。
Side note: Mind that Camel also allows you to configure these kind on global level (aka context scope) instead of route. Eg you can have a context scoped error handler. And then only in a special route override and have a route special error handler.
在 Camel 3.0 之后,我们将使 DSL 更加严格,因此我们在开始时强制执行配置。这也减少了您在常规路由的代码帮助列表中看到的方法数量(例如,按 ctrl + 空格键)。因为这些配置将不再列出。
它们之所以出现,是因为它们继承了相同的基类,这是 DSL 中的基石。我们不想在当前的 2.x 系列中打破这一点,因为那样一些人可能会受到影响。
关于java - onCompletion() 顺序在 Camel DSL 中是否重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10182281/