8.9. Delayer
概述 复制链接链接已复制到粘贴板!
延迟器 是一个处理器,可让您对传入消息应用 相对 时间延迟。
Java DSL 示例 复制链接链接已复制到粘贴板!
您可以使用 delay ()
命令将 相对时间延迟 (以毫秒为单位)添加到传入的消息。例如,以下路由会延迟所有传入的信息(2 秒):
from("seda:a").delay(2000).to("mock:result");
from("seda:a").delay(2000).to("mock:result");
另外,您可以使用表达式指定时间延迟:
from("seda:a").delay(header("MyDelay")).to("mock:result");
from("seda:a").delay(header("MyDelay")).to("mock:result");
以下 delay ()
以下的 DSL 命令解释为 delay ()
的子斜杠。因此,在某些上下文中,需要插入 end ()
命令来终止 delay ()的子层。例如,当 delay ()
出现在 onException ()
子句中时,您将终止它,如下所示:
XML 配置示例 复制链接链接已复制到粘贴板!
以下示例演示了 XML DSL 中的延迟:
创建自定义延迟 复制链接链接已复制到粘贴板!
您可以将表达式与 bean 结合使用来确定延迟,如下所示:
from("activemq:foo"). delay().expression().method("someBean", "computeDelay"). to("activemq:bar");
from("activemq:foo").
delay().expression().method("someBean", "computeDelay").
to("activemq:bar");
bean 类可以定义如下:
异步延迟 复制链接链接已复制到粘贴板!
您可以让延迟程序使用 非阻塞异步延迟,这意味着 Apache Camel 将调度一个任务来在以后执行。该任务负责处理路由的后方部分(延迟后)。这允许调用者线程取消阻塞和服务进一步传入的信息。例如:
from("activemq:queue:foo") .delay(1000) .asyncDelayed() .to("activemq:aDelayedQueue");
from("activemq:queue:foo")
.delay(1000)
.asyncDelayed()
.to("activemq:aDelayedQueue");
同一路由可以使用 XML DSL 编写,如下所示:
选项 复制链接链接已复制到粘贴板!
delayer 模式支持以下选项:
Name | 默认值 | 描述 |
|
| Camel 2.4: 如果启用,则使用调度的线程池异步发生延迟消息。 |
|
Camel 2.4: 如果启用了 | |
|
|
Camel 2.4: 如果启用了 |