java - onCompletion() 顺序在 Camel DSL 中是否重要?

标签 java activemq apache-camel

我试图在一条消息上设置一些 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/

相关文章:

messaging - 使用 Camel 处理长期进程的方法

java - 将数据/对象附加到选项卡式布局中的选项卡

java - Spring 安全 SAML OpenAM

java - 使用 activemq-client jar 与 activemq-all jar 的问题

java - 我们可以在Java swing客户端中使用Activemq吗?

java - Camel : Route from direct to processor

java - 按员工 ID 号对字符串数组进行排序

java - 获取所有给定列表中出现的所有字符串

spring - 获取原因 :null in property dlqDeliveryFailureCause

logging - 在 Apache Camel 中记录过滤消息体的最佳方法