问题: 如何获得一个可增加的索引——即在 RouteBuilder 中的 loop() 期间使用——以便对“direct:thingC”的迭代调用将“处理”后续元素(在数组列表中)?
这是 configure() 方法...
private final org.apache.camel.Processor proc1 = new Processor1();
private static final List<String> searchList = Arrays.asList("AA", "BB");
private static final int z = searchList.size();
private static int x = 0;
//***idea is to both elements using an index during the "loop".... Not working....
@Override
public void configure() throws Exception {
from("timer://foo?fixedRate=true&period=" + 5000) //5 seconds...
.to("direct:thingB");
from("direct:thingB")
.log("---------------------- (from(\"direct:thingB\"))... ----------x=" + x)
.loop(searchList.size()).to("direct:thingC");
from("direct:thingC")
.log("---------------------- (from(\"direct:thingC\"))... ----------searchList.get(" + x++ + ")=" + searchList.get(x));
}
日志输出看起来像这样(索引不增加:总是选择相同的元素)... :-(
2017-09-01 16:13:19,142 | INFO | 43 - timer://foo | route15 | 232 - org.apache.camel.camel-core - 2.17.0.redhat-630187 | ---------------------- (from("direct:thingB"))... ----------x=0
2017-09-01 16:13:19,142 | INFO | 43 - timer://foo | route16 | 232 - org.apache.camel.camel-core - 2.17.0.redhat-630187 | ---------------------- (from("direct:thingC"))... ----------searchList.get(0)=BB
2017-09-01 16:13:19,143 | INFO | 43 - timer://foo | route16 | 232 - org.apache.camel.camel-core - 2.17.0.redhat-630187 | ---------------------- (from("direct:thingC"))... ----------searchList.get(0)=BB
2017-09-01 16:13:24,141 | INFO | 43 - timer://foo | route15 | 232 - org.apache.camel.camel-core - 2.17.0.redhat-630187 | ---------------------- (from("direct:thingB"))... ----------x=0
2017-09-01 16:13:24,141 | INFO | 43 - timer://foo | route16 | 232 - org.apache.camel.camel-core - 2.17.0.redhat-630187 | ---------------------- (from("direct:thingC"))... ----------searchList.get(0)=BB
2017-09-01 16:13:24,142 | INFO | 43 - timer://foo | route16 | 232 - org.apache.camel.camel-core - 2.17.0.redhat-630187 | ---------------------- (from("direct:thingC"))... ----------searchList.get(0)=BB
目标是 - 而不是 - 有这样的输出....
2017-09-01 16:13:19,142 | INFO | 43 - timer://foo | route15 | 232 - org.apache.camel.camel-core - 2.17.0.redhat-630187 | ---------------------- (from("direct:thingB"))... ----------x=0
2017-09-01 16:13:19,142 | INFO | 43 - timer://foo | route16 | 232 - org.apache.camel.camel-core - 2.17.0.redhat-630187 | ---------------------- (from("direct:thingC"))... ----------searchList.get(0)=AA
2017-09-01 16:13:19,143 | INFO | 43 - timer://foo | route16 | 232 - org.apache.camel.camel-core - 2.17.0.redhat-630187 | ---------------------- (from("direct:thingC"))... ----------searchList.get(1)=BB
2017-09-01 16:13:24,141 | INFO | 43 - timer://foo | route15 | 232 - org.apache.camel.camel-core - 2.17.0.redhat-630187 | ---------------------- (from("direct:thingB"))... ----------x=0
2017-09-01 16:13:24,141 | INFO | 43 - timer://foo | route16 | 232 - org.apache.camel.camel-core - 2.17.0.redhat-630187 | ---------------------- (from("direct:thingC"))... ----------searchList.get(0)=AA
2017-09-01 16:13:24,142 | INFO | 43 - timer://foo | route16 | 232 - org.apache.camel.camel-core - 2.17.0.redhat-630187 | ---------------------- (from("direct:thingC"))... ----------searchList.get(1)=BB
解决方案:根据 Alessandro 的建议,如下
private final String s = "AA,BB";
@Override
public void configure() throws Exception {
from("timer://foo?fixedRate=true&period=" + 5000) //5 seconds...
.setBody(constant(s))
.to("direct:thingB")
from("direct:thingB")
.split().tokenize(",")
.to("direct:thingC");
from("direct:thingC")
.log("body=" + body()); //note: this value looks like simple{AA}
}