我在代码中使用循环。我知道循环会在Apache Camel: Route loop is lost when choice is added to the path中所述的第一个to发生时中断

现在,我有了一个路由定义,其中我想在循环结束之前跨不同的通道进行路由。例如 :

.loop(simple("${header." + FILE_COUNT + "}"))
    .to("direct:file-iterator")
.end()

from("direct:file-iterator").id("file-iterator")
                                    .to("direct:read-file-checksum")
                                    .to("direct:file-unzip")


对于这种情况,是否有任何解决方法,因为在我的代码中,只有第一个在第一次迭代后才执行?

最佳答案

这条路线:

public void configure() {
   from("direct:start")
       .loop(2)
       .log("CamelLoopIndex = ${header.CamelLoopIndex}")
       .to("direct:file-iterator")
       .end();

   from("direct:file-iterator")
       .id("file-iterator")
       .log("  in file-iterator")
       .to("direct:read-file-checksum")
       .to("direct:file-unzip");

    from("direct:read-file-checksum")
       .log("    in read-file-checksum");

    from("direct:file-unzip")
       .log("    in direct:file-unzip");
    }
}


导致以下输出:

[main] route1                         INFO  CamelLoopIndex = 0
[main] file-iterator                  INFO    in file-iterator
[main] route2                         INFO      in read-file-checksum
[main] route3                         INFO      in direct:file-unzip
[main] route1                         INFO  CamelLoopIndex = 1
[main] file-iterator                  INFO    in file-iterator
[main] route2                         INFO      in read-file-checksum
[main] route3                         INFO      in direct:file-unzip


这就是我所期望的。如果此路由与您的设置相对应,则您的问题不是loop问题,因此您应该查看direct:file-unzip路由。

10-05 22:57
查看更多