2.10.2. 简单调度的路由策略


概述

简单的调度路由策略是一个路由策略,可让您启动、停止、挂起和恢复路由,其中通过提供初始事件的时间和日期来定义这些事件的时间和日期,(可选)通过指定一定数量的后续重试。要定义一个简单的调度路由策略,请创建一个以下类实例:

org.apache.camel.routepolicy.quartz.SimpleScheduledRoutePolicy

依赖项

简单的调度路由策略取决于 Quartz 组件 ll -quartz。例如,如果您使用 Maven 作为构建系统,则需要添加对 camel-quartz 工件的依赖关系。

Java DSL 示例

例 2.7 “用于简单调度的路由的 Java DSL 示例” 介绍如何调度要使用 Java DSL 启动的路由。初始开始时间( startTime )定义为当前时间后的 3 秒。该策略还配置为在初始开始时间后启动路由,3 秒后,通过将 routeStartRepeatCount 设置为 1,并将 routeStartRepeatInterval 设置为 1,并将 routeStartRepeatInterval 设置为 3000 毫秒。

在 Java DSL 中,您可以通过调用路由中的 routePolicy () DSL 命令将路由策略附加到路由。

例 2.7. 用于简单调度的路由的 Java DSL 示例

// Java
SimpleScheduledRoutePolicy policy = new SimpleScheduledRoutePolicy();
long startTime = System.currentTimeMillis() + 3000L;
policy.setRouteStartDate(new Date(startTime));
policy.setRouteStartRepeatCount(1);
policy.setRouteStartRepeatInterval(3000);

from("direct:start")
   .routeId("test")
   .routePolicy(policy)
   .to("mock:success");
注意

您可以通过使用多个参数调用 routePolicy () 来指定路由中的多个策略。

XML DSL 示例

例 2.8 “Simple Scheduled Route 的 XML DSL 示例” 显示如何使用 XML DSL 调度路由启动。

在 XML DSL 中,您可以通过设置路由元素上的 routePolicyRef 属性将路由策略附加到 路由

例 2.8. Simple Scheduled Route 的 XML DSL 示例

<bean id="date" class="java.util.Data"/>

<bean id="startPolicy" class="org.apache.camel.routepolicy.quartz.SimpleScheduledRoutePolicy">
    <property name="routeStartDate" ref="date"/>
    <property name="routeStartRepeatCount" value="1"/>
    <property name="routeStartRepeatInterval" value="3000"/>
</bean>

<camelContext xmlns="http://camel.apache.org/schema/spring">
    <route id="myroute" routePolicyRef="startPolicy">
        <from uri="direct:start"/>
        <to uri="mock:success"/>
    </route>
</camelContext>
注意

您可以通过将 routePolicyRef 的值设置为用逗号分开的 bean ID 列表来指定路由上的多个策略。

定义日期和时间

简单调度路由策略中使用的触发器的初始时间使用 java.util. Date 类型来指定。定义日期实例的最灵活方法是通过 java.util.GregorianCalendar 类。使用 GregorianCalendar 类的方便构造器和方法来定义日期,然后通过调用 GregorianCalendar.getTime () 获取 日期 实例。

例如,要定义 2011 年 1 月 1 日的时间和日期,请致电 GregorianCalendar or,如下所示:

// Java
import java.util.GregorianCalendar;
import java.util.Calendar;
...
GregorianCalendar gc = new GregorianCalendar(
    2011,
    Calendar.JANUARY,
    1,
    12,  // hourOfDay
    0,   // minutes
    0    // seconds
);

java.util.Date triggerDate = gc.getTime();

GregorianCalendar 类还支持定义不同时区的时间。默认情况下,它会使用您计算机上的本地时区。

正常关闭

当您将简单的调度路由策略配置为停止路由时,路由停止算法会自动与安全关闭过程集成(请参阅 第 2.9 节 “控制开始和关闭路由”)。这意味着该任务会等待当前交换完成处理,然后再关闭路由。但是,您可以设置一个超时,它会强制路由在指定时间后停止,无论路由是否完成交换处理。

在 Timeout 超时时记录开机交换

如果正常关机无法在给定的超时时间内完全关闭,那么 Apache Camel 将执行更加积极的关闭。它强制路由、threadpool 等路由关闭。

超时后,Apache Camel 会记录关于当前航班交换器的信息。它记录交换的来源和当前交换路由。

例如,以下日志显示了一个 inflight 交换器,该交换来自于 route1,目前在 delay1 节点上位于同一 route1。

在正常关闭过程中,如果您在 org.apache.camel.impl.DefaultShutdownStrategy 上启用 DEBUG 日志记录级别,则会记录相同的动态交换信息。

2015-01-12 13:23:23,656 [- ShutdownTask] INFO DefaultShutdownStrategy - There are 1 inflight exchanges:
InflightExchange: [exchangeId=ID-davsclaus-air-62213-1421065401253-0-3, fromRouteId=route1, routeId=route1, nodeId=delay1, elapsed=2007, duration=2017]

如果您不想看到这些日志,您可以通过将选项 logInflightExchangesOnTimeout 设置为 false 来关闭此日志。

  context.getShutdownStrategegy().setLogInflightExchangesOnTimeout(false);

调度任务

您可以使用简单的调度路由策略来定义以下一个或多个调度任务:

启动路由

下表列出了调度一个或多个路由启动的参数。

参数类型默认值描述

routeStartDate

java.util.Date

None

指定第一次启动路由时的日期和时间。

routeStartRepeatCount

int

0

当设置为非零值时,指定路由应启动的次数。

routeStartRepeatInterval

long

0

指定开始间隔,以毫秒为单位。

停止路由

下表列出了调度一个或多个路由停止的参数。

参数类型默认值描述

routeStopDate

java.util.Date

None

指定第一次停止路由时的日期和时间。

routeStopRepeatCount

int

0

当设置为非零值时,指定路由应停止的次数。

routeStopRepeatInterval

long

0

指定停止之间的间隔,以毫秒为单位。

routeStopGracePeriod

int

10000

指定在强制停止路由前等待当前交换完成处理(宽限期)的时长。在无限宽限期内设置为 0。

routeStopTimeUnit

long

TimeUnit.MILLISECONDS

指定宽限期的时间范围。

挂起路由

下表列出了用于调度一次或多次路由挂起的参数。

参数类型默认值描述

routeSuspendDate

java.util.Date

None

指定第一次暂停路由时的日期和时间。

routeSuspendRepeatCount

int

0

当设置为非零值时,指定路由应暂停的次数。

routeSuspendRepeatInterval

long

0

指定挂起之间的时间间隔,以毫秒为单位。

恢复路由

下表列出了用于调度一次或多次重新消耗的参数。

参数类型默认值描述

routeResumeDate

java.util.Date

None

指定第一次恢复路由时的日期和时间。

routeResumeRepeatCount

int

0

当设置为非零值时,指定路由应恢复的次数。

routeResumeRepeatInterval

long

0

指定恢复间隔(以毫秒为单位)。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.