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. 옵션
지연기 패턴은 다음 옵션을 지원합니다.
이름 | 기본값 | 설명 |
|
| Camel 2.4: 활성화된 경우 예약된 스레드 풀을 사용하여 지연된 메시지가 비동기적으로 수행됩니다. |
|
Camel 2.4: | |
|
|
Camel 2.4: |