8.16. 循环
循环 复制链接链接已复制到粘贴板!
循环 模式允许您多次处理消息。它主要用于测试。
默认情况下,循环在整个循环中使用相同的交换。上一个迭代的结果用于下一个(请参阅 第 5.4 节 “管道和过滤器”)。在 Camel 2.8 上,您可以改为启用复制模式。详情请查看选项表。
交换属性 复制链接链接已复制到粘贴板!
在每个循环迭代中,会设置两个交换属性,它们可以被循环中包含的任何处理器(可选)读取。
| 属性 | 描述 | 
|---|---|
|   
									  |   Apache Camel 2.0:循环总数  | 
|   
									  |   Apache Camel 2.0:当前迭代的索引(基于0)  | 
Java DSL 示例 复制链接链接已复制到粘贴板!
					以下示例演示了如何从 direct:x 端点获取请求,然后重复发送消息到 mock:result。循环迭代数量指定为 loop () 的参数,或者通过在运行时评估表达式来评估 int (或其他 RuntimeCamelException 除外)。
				
以下示例以恒定形式传递循环计数:
from("direct:a").loop(8).to("mock:result");
from("direct:a").loop(8).to("mock:result");
以下示例评估一个简单的表达式以确定循环计数:
from("direct:b").loop(header("loop")).to("mock:result");
from("direct:b").loop(header("loop")).to("mock:result");
以下示例评估 XPath 表达式以确定循环计数:
from("direct:c").loop().xpath("/hello/@times").to("mock:result");
from("direct:c").loop().xpath("/hello/@times").to("mock:result");
XML 配置示例 复制链接链接已复制到粘贴板!
您可以在 Spring XML 中配置相同的路由。
以下示例以恒定形式传递循环计数:
以下示例评估一个简单的表达式以确定循环计数:
使用复制模式 复制链接链接已复制到粘贴板!
					假定我们发送消息为 direct:start 端点,其中包含字母 A。处理此路由的输出将是这样,每个 模拟:循环 端点将接收 AB 作为消息。
				
					但是,如果没有 启用复制模式,则 模拟:loop 将接收 AB、ABB、ABBB 信息。
				
在复制模式下 XML DSL 中的等效示例如下:
选项 复制链接链接已复制到粘贴板!
					循环 DSL 命令支持以下选项:
				
|   Name  |   默认值  |   描述  | 
|   
									  |   
									  |   
									Camel 2.8: 是否使用是否使用复制模式。如果为   | 
do While Loop 复制链接链接已复制到粘贴板!
					在循环 时,您可以使用 do a do 来执行循环,直到条件满足为止。该条件可以是 true 或 false。
				
					在 DSL 中,命令为 LoopDoWhile。以下示例将执行循环,直到消息正文长度为 5 个字符或更少:
				
					在 XML 中,命令是 loop doWhile。以下示例还会执行循环,直到消息正文长度为 5 个字符或更少: