8.9. Delayer

8.9.1. 개요

지연은 들어오는 메시지에 상대 시간 지연을 적용할 수 있는 프로세서입니다.

8.9.2. Java DSL 예

delay() 명령을 사용하여 들어오는 메시지에 상대 시간 지연을 밀리초 단위로 추가할 수 있습니다. 예를 들어 다음 경로는 들어오는 모든 메시지를 2초로 지연합니다.

from("seda:a").delay(2000).to("mock:result");

또는 표현식을 사용하여 시간 지연을 지정할 수 있습니다.

from("seda:a").delay(header("MyDelay")).to("mock:result");

delay() 를 따르는 DSL 명령은 delay() 의 하위 항목으로 해석됩니다. 따라서 일부 컨텍스트에서 end() 명령을 삽입하여 delay()의 하위 항목을 종료할 필요가 있습니다. 예를 들어 delay()onException() 절 내에 표시되면 다음과 같이 종료합니다.

from("direct:start")
    .onException(Exception.class)
        .maximumRedeliveries(2)
        .backOffMultiplier(1.5)
        .handled(true)
        .delay(1000)
            .log("Halting for some time")
            .to("mock:halt")
        .end()
    .end()
    .to("mock:result");

8.9.3. XML 구성 예

다음 예제에서는 XML DSL의 지연을 보여줍니다.

<camelContext xmlns="http://camel.apache.org/schema/spring">
    <route>
        <from uri="seda:a"/>
        <delay>
            <header>MyDelay</header>
        </delay>
        <to uri="mock:result"/>
    </route>
    <route>
        <from uri="seda:b"/>
        <delay>
            <constant>1000</constant>
        </delay>
        <to uri="mock:result"/>
    </route>
</camelContext>

8.9.4. 사용자 정의 지연 생성

sum과 결합된 표현식을 사용하여 다음과 같이 지연을 확인할 수 있습니다.

from("activemq:foo").
  delay().expression().method("someBean", "computeDelay").
  to("activemq:bar");

다음처럼 Quarkus 클래스를 정의할 수 있는 위치는 다음과 같습니다.

public class SomeBean {
  public long computeDelay() {
     long delay = 0;
     // use java code to compute a delay value in millis
     return delay;
 }
}

8.9.5. 비동기 지연

지연 시간이 비동기 지연을 사용하도록 할 수 있습니다. 즉, Apache Camel에서 향후 실행될 작업을 예약합니다. 이 작업은 경로의 마지막 부분을 처리합니다(마운트 후). 이를 통해 호출자 스레드는 수신되는 메시지를 차단 해제하고 추가로 서비스할 수 있습니다. 예를 들면 다음과 같습니다.

from("activemq:queue:foo")
    .delay(1000)
    .asyncDelayed()
    .to("activemq:aDelayedQueue");

다음과 같이 XML DSL로 동일한 경로를 작성할 수 있습니다.

<route>
   <from uri="activemq:queue:foo"/>
   <delay asyncDelayed="true">
       <constant>1000</constant>
   </delay>
   <to uri="activemq:aDealyedQueue"/>
   </route>

8.9.6. 옵션

지연기 패턴은 다음 옵션을 지원합니다.

이름

기본값

설명

asyncDelayed

false

Camel 2.4: 활성화된 경우 예약된 스레드 풀을 사용하여 지연된 메시지가 비동기적으로 수행됩니다.

executorServiceRef

 

Camel 2.4: asyncDelay 가 활성화된 경우 사용할 사용자 정의 스레드 풀을 나타냅니다.

callerRunsWhenRejected

true

Camel 2.4: asyncDelayed 가 활성화된 경우 사용됩니다. 스레드 풀이 작업을 거부한 경우 호출자 스레드가 작업을 실행해야 하는지 여부를 제어합니다.