8.8. Throttler
8.8.1. 개요
throttler 는 들어오는 메시지의 흐름 속도를 제한하는 프로세서입니다. 이 패턴을 사용하여 대상 끝점이 과부하되지 않도록 보호할 수 있습니다. Apache Camel에서는 throttle()
Java DSL 명령을 사용하여 throttler 패턴을 구현할 수 있습니다.
8.8.2. Java DSL 예
흐름 속도를 초당 100개 메시지로 제한하려면 다음과 같이 경로를 정의합니다.
from("seda:a").throttle(100).to("seda:b");
필요한 경우 timePeriodMillis()
DSL 명령을 사용하여 흐름 속도를 제어하는 기간을 사용자 지정할 수 있습니다. 예를 들어 흐름 속도를 30000밀리초당 3개의 메시지로 제한하려면 다음과 같이 경로를 정의합니다.
from("seda:a").throttle(3).timePeriodMillis(30000).to("mock:result");
8.8.3. XML 구성 예
다음 예제에서는 XML로 이전 경로를 구성하는 방법을 보여줍니다.
<camelContext id="throttleRoute" xmlns="http://camel.apache.org/schema/spring"> <route> <from uri="seda:a"/> <!-- throttle 3 messages per 30 sec --> <throttle timePeriodMillis="30000"> <constant>3</constant> <to uri="mock:result"/> </throttle> </route> </camelContext>
8.8.4. 기간당 최대 요청 동적으로 변경
사용 가능한 Camel 2.8 since we use an Expression, you can adjust this value at runtime, for example you can provide a header with the value. 런타임 Camel에서 표현식을 평가하고 결과를 java.lang.Long
유형으로 변환합니다. 아래 예제에서는 메시지의 헤더를 사용하여 기간당 최대 요청을 결정합니다. 헤더가 없으면 8.8절. “Throttler” 에서 이전 값을 사용합니다. 따라서 값을 변경할 때만 헤더를 제공할 수 있습니다.
<camelContext id="throttleRoute" xmlns="http://camel.apache.org/schema/spring"> <route> <from uri="direct:expressionHeader"/> <throttle timePeriodMillis="500"> <!-- use a header to determine how many messages to throttle per 0.5 sec --> <header>throttleValue</header> <to uri="mock:result"/> </throttle> </route> </camelContext>
8.8.5. 비동기 지연
throttler는 비차단 비동기 지연 을 활성화할 수 있습니다. 즉, Apache Camel에서 향후 실행될 작업을 예약합니다. 이 작업은 경로의 마지막 부분을 처리합니다( throttler 이후). 이를 통해 호출자 스레드는 수신되는 메시지를 차단 해제하고 추가로 서비스할 수 있습니다. 예를 들면 다음과 같습니다.
from("seda:a").throttle(100).asyncDelayed().to("seda:b");
Camel 2.17에서 Throttler는 메시지 흐름을 개선하는 기간 동안 롤링 창을 사용합니다. 그러나 스로틀러의 성능이 향상됩니다.
8.8.6. 옵션
throttle
DSL 명령은 다음 옵션을 지원합니다.
이름 | 기본값 | 설명 |
| throttle까지의 기간당 최대 요청 수입니다. 이 옵션을 제공해야 하며 양수를 제공해야 합니다. Camel 2.8 이후의 XML DSL에서 이 옵션은 속성 대신 Expression을 사용하여 구성됩니다. | |
|
|
제한자가 최대 |
|
| Camel 2.4: 활성화하면 예약된 스레드 풀을 사용하여 지연되는 모든 메시지가 비동기적으로 수행됩니다. |
|
Camel 2.4: | |
|
|
Camel 2.4: |