검색

2.10. 스케줄링된 경로 정책

download PDF

2.10.1. 예약된 경로 정책 개요

2.10.1.1. 개요

스케줄링된 경로 정책은 런타임 시 경로에 영향을 주는 이벤트를 트리거하는 데 사용할 수 있습니다. 특히 현재 사용 가능한 구현을 사용하면 정책에 의해 지정된 언제든지 경로를 시작, 중지, 일시 중지 또는 재개할 수 있습니다.

2.10.1.2. 작업 예약

예약된 경로 정책은 다음과 같은 종류의 이벤트를 트리거할 수 있습니다.

  • 지정된 시간(또는 시간)에 경로를 시작합니다. 이 이벤트는 경로가 현재 중지된 상태에 있는 경우에만 적용됩니다. 활성화를 기다립니다.
  • 지정된 시간(또는 시간)에 경로를 중지합니다. 이 이벤트는 경로가 현재 활성 상태인 경우에만 적용됩니다.
  • 경로 시작 시( from())에 지정된 대로 경로의 시작 시 소비자 끝점을 비활성화하십시오. 나머지 경로는 여전히 활성화되어 있지만 클라이언트는 경로에 새 메시지를 보낼 수 없습니다.
  • 경로 시작 시 소비자 끝점을 다시 활성화하여 경로를 완전히 활성 상태로 반환합니다.

2.10.1.3. Quartz 구성 요소

Quartz 구성 요소는 작업 스케줄러의 오픈 소스 구현인 Terracotta의 Quartz 를 기반으로 하는 타이머 구성 요소입니다. Quartz 구성 요소는 간단한 스케줄링 경로 정책과 cron 스케줄링 경로 정책 모두에 대한 기본 구현을 제공합니다.

2.10.2. 간단한 예약 경로 정책

2.10.2.1. 개요

간단한 스케줄링 경로 정책은 경로를 시작, 중지, 일시 중지 및 재개할 수 있는 경로 정책입니다. 여기서 이러한 이벤트의 타이밍은 초기 이벤트의 시간 및 날짜를 제공하고 (선택 사항) 특정 횟수의 후속 거절을 지정하여 정의합니다. 간단한 스케줄링 경로 정책을 정의하려면 다음 클래스의 인스턴스를 생성합니다.

org.apache.camel.routepolicy.quartz.SimpleScheduledRoutePolicy

2.10.2.2. 종속성

간단한 예약 경로 정책은 Quartz 구성 요소인 camel-quartz 에 따라 다릅니다. 예를 들어 Maven을 빌드 시스템으로 사용하는 경우 camel-quartz 아티팩트에 종속성을 추가해야 합니다.

2.10.2.3. Java DSL 예

예 2.7. “Java DSL 예제 of Simple Scheduled Route” Java DSL을 사용하여 시작하기 위해 경로를 예약하는 방법을 보여줍니다. 초기 시작 시간인 startTime 은 현재 시간 이후 3초로 정의됩니다. 또한 이 정책은 route starts RepeatCount를 1로 설정하고 routeStartRepeat Interval 을 3000밀리초로 설정하여 초기 시작 시간 3초 후 경로를 시작하도록 구성됩니다.

Java DSL에서는 경로에서 routePolicy() DSL 명령을 호출하여 경로 정책을 경로에 연결합니다.

예 2.7. Java DSL 예제 of Simple Scheduled Route

// 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() 를 여러 인수로 호출하여 경로에 여러 정책을 지정할 수 있습니다.

2.10.2.4. XML DSL 예

예 2.8. “XML DSL 예제 of Simple Scheduled Route” XML DSL을 사용하여 시작하도록 경로를 예약하는 방법을 보여줍니다.

XML DSL에서는 경로 요소에서 route PolicyRef 속성을 설정하여 경로 정책을 경로에 연결합니다.

예 2.8. XML DSL 예제 of Simple Scheduled Route

<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 값을 쉼표로 구분된 polkit ID 목록으로 설정하여 경로에 여러 정책을 지정할 수 있습니다.

2.10.2.5. 날짜 및 시간 정의

간단한 스케줄링 경로 정책에 사용되는 트리거의 초기 시간은 java.util.Date 유형을 사용하여 지정됩니다. Date 인스턴스를 정의하는 가장 유연한 방법은 java.util.Gregorian Cryostat 클래스를 통해 수행됩니다. 편리한 생성자와 메서드를 사용하여 날짜를 정의한 다음 Cryostat .getTime()을 호출하여 Date 인스턴스를 가져옵니다.

예를 들어, 2011년 1월 1일 정오에 대한 시간 및 날짜를 정의하려면 다음과 같이 Cryostat 생성자를 호출합니다.

// 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();

또한 Cryo stat 클래스는 다른 시간대의 시간 정의를 지원합니다. 기본적으로 컴퓨터의 로컬 시간대를 사용합니다.

2.10.2.6. 정상 종료

경로를 중지하도록 간단한 스케줄링 경로 정책을 구성하면 경로 중지 알고리즘이 정상 종료 절차와 자동으로 통합됩니다( 2.9절. “경로 시작 및 연결 제어”참조). 즉, 작업은 경로를 종료하기 전에 현재 교환이 처리를 완료할 때까지 기다립니다. 그러나 경로가 교환 처리를 완료했는지 여부에 관계없이 지정된 시간 후에 경로를 강제로 중지할 수 있습니다.

2.10.2.7. 시간 초과에 로깅 Inflight 교환

정상 종료가 지정된 시간 제한 기간 내에 완전히 종료되지 않으면 Apache Camel에서 보다 공격적인 종료를 수행합니다. 이는 경로, 스레드 풀 등을 강제 종료합니다.

시간 초과 후 Apache Camel은 현재 진행 중인 교환에 대한 정보를 기록합니다. 교환 및 교환의 현재 경로의 출처를 기록합니다.

예를 들어 아래 로그는 route1에서 시작되며 현재 delay1 노드에서 동일한 route1에 있는 inflight 교환이 있음을 보여줍니다.

정상 종료 중에 org.apache.camel.impl.DefaultShutdownStrategy 에서 DEBUG 로깅 수준을 활성화하면 동일한 inflight 교환 정보를 기록합니다.

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);

2.10.2.8. 작업 예약

간단한 스케줄링 경로 정책을 사용하여 다음 스케줄링 작업 중 하나 이상을 정의할 수 있습니다.

2.10.2.9. 경로 시작

다음 표에는 하나 이상의 경로를 예약하는 매개변수가 나열되어 있습니다.

매개변수유형Default설명

routeStartDate

java.util.Date

없음

경로를 처음 시작할 날짜와 시간을 지정합니다.

routeStartRepeatCount

int

0

0이 아닌 값으로 설정하는 경우 경로를 시작해야 하는 횟수를 지정합니다.

routeStartRepeatInterval

long

0

시작 사이의 시간 간격을 밀리초 단위로 지정합니다.

2.10.2.10. 경로 중지

다음 표에는 하나 이상의 경로 중지를 예약하는 매개변수가 나열되어 있습니다.

매개변수유형Default설명

routeStopDate

java.util.Date

없음

경로를 처음 중지할 날짜와 시간을 지정합니다.

routeStopRepeatCount

int

0

0이 아닌 값으로 설정하면 경로를 중지한 횟수를 지정합니다.

routeStopRepeatInterval

long

0

중지 사이의 시간 간격을 밀리초 단위로 지정합니다.

routeStopGracePeriod

int

10000

경로를 강제 중지하기 전에 현재 교환이 처리를 완료할 때까지 대기하는 시간을 지정합니다. 무한 유예 기간의 경우 0으로 설정합니다.

routeStopTimeUnit

long

TimeUnit.MILLISECONDS

유예 기간의 시간 단위를 지정합니다.

2.10.2.11. 경로 일시 중단

다음 표에는 한 번 이상의 경로 일시 중지를 예약하는 매개변수가 나열되어 있습니다.

매개변수유형Default설명

routeSuspendDate

java.util.Date

없음

경로를 처음 일시 중단한 날짜와 시간을 지정합니다.

routeSuspendRepeatCount

int

0

0이 아닌 값으로 설정하는 경우 경로를 일시 중단해야 하는 횟수를 지정합니다.

routeSuspendRepeatInterval

long

0

일시 중단 사이의 시간 간격을 밀리초 단위로 지정합니다.

2.10.2.12. 경로 재시작

다음 표에는 하나 이상의 경로 재개를 예약하는 매개변수가 나열되어 있습니다.

매개변수유형Default설명

routeResumeDate

java.util.Date

없음

경로가 처음 다시 시작되는 날짜와 시간을 지정합니다.

routeResumeRepeatCount

int

0

0이 아닌 값으로 설정하는 경우 경로를 다시 시작해야 하는 횟수를 지정합니다.

routeResumeRepeatInterval

long

0

다시 시작 사이의 시간 간격을 밀리초 단위로 지정합니다.

2.10.3. cron 스케줄링된 경로 정책

2.10.3.1. 개요

cron 스케줄링 경로 정책은 cron 표현식을 사용하여 이러한 이벤트의 타이밍을 지정하는 경로를 시작, 중지, 일시 중지 및 재개할 수 있는 경로 정책입니다. cron 스케줄링 경로 정책을 정의하려면 다음 클래스의 인스턴스를 생성합니다.

org.apache.camel.routepolicy.quartz.CronScheduledRoutePolicy

2.10.3.2. 종속성

간단한 예약 경로 정책은 Quartz 구성 요소인 camel-quartz 에 따라 다릅니다. 예를 들어 Maven을 빌드 시스템으로 사용하는 경우 camel-quartz 아티팩트에 종속성을 추가해야 합니다.

2.10.3.3. Java DSL 예

예 2.9. “Java DSL 예: Cron Scheduled Route” Java DSL을 사용하여 시작하기 위해 경로를 예약하는 방법을 보여줍니다. 정책은 cron 표현식 \*/3 * * * ? 로 구성되며 3 초마다 시작 이벤트를 트리거합니다.

Java DSL에서는 경로에서 routePolicy() DSL 명령을 호출하여 경로 정책을 경로에 연결합니다.

예 2.9. Java DSL 예: Cron Scheduled Route

// Java
CronScheduledRoutePolicy policy = new CronScheduledRoutePolicy();
policy.setRouteStartTime("*/3 * * * * ?");

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

routePolicy() 를 여러 인수로 호출하여 경로에 여러 정책을 지정할 수 있습니다.

2.10.3.4. XML DSL 예

예 2.10. “XML DSL 예제 Cron Scheduled 경로”XML DSL을 사용하여 시작하도록 경로를 예약하는 방법을 보여줍니다.

XML DSL에서는 경로 요소에서 route PolicyRef 속성을 설정하여 경로 정책을 경로에 연결합니다.

예 2.10. XML DSL 예제 Cron Scheduled 경로

<bean id="date" class="org.apache.camel.routepolicy.quartz.SimpleDate"/>

<bean id="startPolicy" class="org.apache.camel.routepolicy.quartz.CronScheduledRoutePolicy">
    <property name="routeStartTime" value="*/3 * * * * ?"/>
</bean>

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

routePolicyRef 값을 쉼표로 구분된 polkit ID 목록으로 설정하여 경로에 여러 정책을 지정할 수 있습니다.

2.10.3.5. cron 표현식 정의

cron 표현식 구문에는 UNIX cron 유틸리티의 출처가 있으며 UNIX 시스템에서 백그라운드에서 실행되도록 작업을 예약합니다. cron 표현식은 효과적으로 단일 이벤트 또는 주기적으로 반복되는 여러 이벤트를 지정할 수 있는 날짜 및 시간을 와일드카드하는 구문입니다.

cron 표현식은 다음 순서로 6 또는 7 필드로 구성됩니다.

Seconds Minutes Hours DayOfMonth Month DayOfWeek [Year]

한 번만 발생하는 이벤트를 정의하지 않으려면 year 필드는 선택 사항이며 일반적으로 생략됩니다. 각 필드는 리터럴과 특수 문자의 혼합으로 구성됩니다. 예를 들어 다음 cron 표현식은 매일 자정에 한 번 실행되는 이벤트를 지정합니다.

0 0 24 * * ?

* 문자는 필드의 모든 값과 일치하는 와일드카드입니다. 따라서 앞의 표현식은 매달 매일 일치합니다. ? 문자는 더미 자리 표시자이며 *ignore 이 필드*를 의미합니다. DayOfMonth 필드 또는 DayOfWeek 필드에 항상 표시됩니다. 이 필드는 두 필드를 동시에 지정하는 논리적으로 일관성이 유지되지 않기 때문입니다. 예를 들어 하루에 한 번 발생하지만 월요일부터 금요일까지 실행되는 이벤트를 예약하려면 다음 cron 표현식을 사용합니다.

0 0 24 ? * MON-FRI

여기서 하이픈 문자는 범위 MON-FRI 를 지정합니다. 슬래시 문자 / 를 사용하여 증분을 지정할 수도 있습니다. 예를 들어 5분마다 이벤트가 실행되도록 지정하려면 다음 cron 표현식을 사용합니다.

0 0/5 * * * ?

cron 표현식 구문에 대한 자세한 설명은 CRON 표현식 에 대한 404 문서를 참조하십시오.

2.10.3.6. 작업 예약

cron 스케줄링 경로 정책을 사용하여 다음 스케줄링 작업 중 하나 이상을 정의할 수 있습니다.

2.10.3.7. 경로 시작

다음 표에는 하나 이상의 경로를 예약하는 매개변수가 나열되어 있습니다.

매개변수유형Default설명

routeStartString

문자열

없음

하나 이상의 경로 시작 이벤트를 트리거하는 cron 표현식을 지정합니다.

2.10.3.8. 경로 중지

다음 표에는 하나 이상의 경로 중지를 예약하는 매개변수가 나열되어 있습니다.

매개변수유형Default설명

routeStopTime

문자열

없음

하나 이상의 경로 중지 이벤트를 트리거하는 cron 표현식을 지정합니다.

routeStopGracePeriod

int

10000

경로를 강제 중지하기 전에 현재 교환이 처리를 완료할 때까지 대기하는 시간을 지정합니다. 무한 유예 기간의 경우 0으로 설정합니다.

routeStopTimeUnit

long

TimeUnit.MILLISECONDS

유예 기간의 시간 단위를 지정합니다.

2.10.3.9. 경로 일시 중단

다음 표에는 한 번 이상의 경로 일시 중지를 예약하는 매개변수가 나열되어 있습니다.

매개변수유형Default설명

routeSuspendTime

문자열

없음

하나 이상의 경로 일시 중지 이벤트를 트리거하는 cron 표현식을 지정합니다.

2.10.3.10. 경로 재시작

다음 표에는 하나 이상의 경로 재개를 예약하는 매개변수가 나열되어 있습니다.

매개변수유형Default설명

routeResumeTime

문자열

없음

하나 이상의 경로 재개 이벤트를 트리거하는 cron 표현식을 지정합니다.

2.10.4. 경로 정책 Cryostat

2.10.4.1. 경로 정책 internal 사용

Camel 2.14 사용 가능

모든 경로에 경로 정책을 사용하려면 org.apache.camel.spi.RoutePolicyFactory 를 각 경로에 대해 RoutePolicy 인스턴스를 생성하기 위한 팩토리로 사용할 수 있습니다. 이는 모든 경로에 동일한 종류의 경로 정책을 사용하려는 경우 사용할 수 있습니다. 그런 다음 팩토리를 한 번만 구성해야 하며 생성된 모든 경로에 정책이 할당됩니다.

다음과 같이 CamelContext에는 팩토리를 추가하는 API가 있습니다.

context.addRoutePolicyFactory(new MyRoutePolicyFactory());

XML DSL에서 팩토리를 사용하여 < bean&gt;만 정의합니다.

<bean id="myRoutePolicyFactory" class="com.foo.MyRoutePolicyFactory"/>

팩토리에는 경로 정책을 생성하기 위한 createRoutePolicy 방법이 포함되어 있습니다.

/**
 * Creates a new {@link org.apache.camel.spi.RoutePolicy} which will be assigned to the given route.
 *
 * @param camelContext the camel context
 * @param routeId      the route id
 * @param route        the route definition
 * @return the created {@link org.apache.camel.spi.RoutePolicy}, or <tt>null</tt> to not use a policy for this route
 */
RoutePolicy createRoutePolicy(CamelContext camelContext, String routeId, RouteDefinition route);

원하는 만큼의 경로 정책 팩토리를 보유할 수 있습니다. addRoutePolicyFactory 를 다시 호출하거나 XML에서 다른 팩토리를 < bean> 로 선언합니다.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.