为了账号安全,请及时绑定邮箱和手机立即绑定

从处理器内部设置 Camel 交换属性

从处理器内部设置 Camel 交换属性

尚方宝剑之说 2022-07-20 10:59:19
Java 8 和 Camel 2.19.x 在这里。我有以下骆驼路线:<route id="widgetProcessing">  <from uri="activemq:inputQueue"/>  <to uri="{{widgetFetcher}}"/></route>和widgetFetcher处理器:@Component("widgetFetcher")public class WidgetFetcher {  private WidgetDao widgetDao;  public WidgetFetcher(WidgetDao widgetDao) {    this.widgetDao = widgetDao;  }  public Widget getWidgetToProcess() {    // get the next widget id from the database    final Integer firstWidgetId = widgetDao.getFirstSubmittedWidgetId();    // Do lots of stuff with 'firstWidgetId' down here...  }}我想在 之后<from>和之前创建一个交换属性WidgetFetcher,并将该属性的初始值设置为null; 然后有条件地将其值设置为WidgetFetcher. 此外,我希望这个重新分配的值在剩余的路线/处理中“坚持”。所以像:<route id="widgetProcessing">  <from uri="activemq:inputQueue"/>  <setProperty propertyName="fizzId">    <constant>null</constant>  </setProperty>  <to uri="{{widgetFetcher}}"/>  <log message="fizzId = ${property[fizzId]}" loggingLevel="ERROR"/></route>接着:public Widget getWidgetToProcess(@ExchangeProperty("fizzId") final String fizzId) {  // get the next widget id from the database  final Integer firstWidgetId = widgetDao.getFirstSubmittedWidgetId();  if (someMethodReturnsTrue()) {    // Does this actually get saved outside the     log.info("About to update fizzId...")    fizzId = UUID.randomUUID().toString();  }  // Do lots of stuff with 'firstWidgetId' down here...}然而,在运行时,本地分配fizzId = ...似乎并没有被日志输出读取:About to update fizzId...fizzId = null所以我认为我的处理器正在接收交换属性的副本,fizzId但是重新分配它的值内联实际上并没有修改路由其余部分的实际值。关于如何做到这一点的任何想法?
查看完整描述

2 回答

?
青春有我

TA贡献1784条经验 获得超8个赞

不要将属性传递给处理器,而是接受交换 - 然后您可以在交换上设置属性。



查看完整回答
反对 回复 2022-07-20
?
森林海

TA贡献2011条经验 获得超2个赞

您可能需要参考更高的东西来设置值。尝试对完整的属性映射 @Properties 使用注释,或者让您的 WidgetFetcher 实现处理器以获取对完整交换的引用。



查看完整回答
反对 回复 2022-07-20
  • 2 回答
  • 0 关注
  • 109 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信