Apache camel拆分器未填充交换中的属性

polhcujo  于 2022-11-07  发布在  Apache
关注(0)|答案(1)|浏览(218)

我有一个路由Producer -〉Split -〉Processor,在处理器中,我试图找出当前正在处理的交换是否是最后一个被拆分的交换。
根据camel split docs,将三个属性放入每个已拆分的Camel交换中:CamelSplitIndex、CamelSplitSize和CamelSplitComplete。
当使用camel 3.0.0-RC 3时,我可以看到这些属性被填充并在处理器类中可用。但是当使用版本3.11.1或3.17.0时,我看不到这些值在交换中被填充。
是我漏掉了什么还是 Camel 虫。
主要类别:
SpringApplication.run,参数);
路线:

from("timer://simpleSplitTimer?period=1000000").process(new Processor() {
                            @Override
                            public void process(Exchange exchange) throws Exception {
                                Trade trade1 = new Trade(1L, 15.4, 200, "WF");
                                Trade trade2 = new Trade(2L, 75.1, 100, "GS");
                                Trade trade3 = new Trade(3L, 20.0, 15, "JP");
                                List<Trade> tradeList = new ArrayList<>();
                                tradeList.add(trade1);
                                tradeList.add(trade2);
                                tradeList.add(trade3);
                                exchange.getIn().setHeader("GUITrade", "Y");
                                exchange.getIn().setBody(tradeList);
                            }
                        })
                        .to("direct:toSplit");

                from("direct:toSplit").split(body()).to("direct:afterSplit1");
                from("direct:afterSplit1").process(postSplitProcessor);

相关性:

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.11.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-spring-boot-starter</artifactId>
            <version>3.0.0-RC3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-jms</artifactId>
            <version>3.0.0-RC3</version>
        </dependency>
    </dependencies>
dl5txlt9

dl5txlt91#

由于您尚未发布用于访问Exchange属性的代码片段,我猜您正在使用Exchange#getProperties来访问不同的属性,这些属性已在 Apache Camel3.9.0版本中进行了优化/重构:
Exchange上的属性已经过优化,分为两部分:内部状态与用户属性。方法getProperties()现在只返回用户属性。要包括内部属性,请使用getAllProperties()。其他API(如getProperty(String))的工作方式与以前相同,能够查找属性,而不管其是内部属性还是自定义属性。
您应该能够访问与拆分相关的属性:

  • 要么切换到使用Exchange#getAllProperties
exchange.getAllProperties().get("CamelSplitIndex");
  • 或者更好地使用更安全的Exchange#getProperty(ExchangePropertyKey)
exchange.getProperty(ExchangePropertyKey.SPLIT_INDEX);

相关问题