1.5. 프로세서


1.5.1. 개요

라우터에서 단순히 소비자 엔드포인트를 생산자 엔드포인트에 연결하는 것보다 더 흥미로운 작업을 수행할 수 있도록 경로에 프로세서를 추가할 수 있습니다. 프로세서는 라우팅 규칙에 삽입하여 규칙을 통과하는 메시지를 임의의 처리를 수행할 수 있는 명령입니다. Apache Camel은 표 1.1. “Apache Camel 프로세서” 와 같이 다양한 프로세서를 제공합니다.

표 1.1. Apache Camel 프로세서
Java DSLXML DSL설명

aggregate()

집계

8.5절. “수집기”여러 개의 들어오는 교환을 단일 교환으로 결합하는 집계기를 생성합니다.

aop()

AOP

지정된 하위 경로 전후에 작업을 수행하려면 Aspect Oriented Programming (AOP)을 사용합니다.

bean(), beanRef()

Cryostat

Java 개체(또는 8080)에서 메서드를 호출하여 현재 교환을 처리합니다. 2.4절. “Cryostat 통합”을 참조하십시오.

choice()

선택

8.1절. “콘텐츠 기반 라우터”: 교환 컨텐츠에 따라 whenotherwise 절을 사용하여 특정 하위 경로를 선택합니다.

convertBodyTo()

convertBodyTo

메시지 본문을 지정된 형식으로 변환합니다.Converts the In message body to the specified type.

delay()

delay

8.9절. “Delayer”: 경로의 마지막 부분으로 교환의 전파를 지연합니다.

doTry()

doTry

doCatch,doFinally, end 절을 사용하여 예외 처리에 대한 try/catch 블록을 생성합니다.

end()

해당 없음

현재 명령 블록을 종료합니다.

enrich(),enrichRef()

번성

10.1절. “콘텐츠 Enricher”: 현재 교환과 지정된 생산자 엔드포인트 URI에서 요청된 데이터를 결합합니다.

filter()

filter

8.2절. “메시지 필터”: 서술자 표현식을 사용하여 들어오는 교환을 필터링합니다.

idempotentConsumer()

idempotentConsumer

11.8절. “idempotent 소비자”: 중복 메시지를 억제하는 전략을 구현합니다.

inheritErrorHandler()

@inheritErrorHandler

특정 경로 노드에서 상속된 오류 처리기를 비활성화하는 데 사용할 수 있는 부울 옵션(Java DSL에서 하위 항목으로 정의됨 및 XML DSL의 속성으로 정의됨).

inOnly()

inOnly

현재 교환의 MEP를 InOnly (패키지 없는 경우)로 설정하거나 교환을 지정된 엔드포인트에 InOnly 로 보냅니다.

inOut()

inOut

현재 교환의 MEP를 InOut (패키지 없는 경우)로 설정하거나 지정된 엔드포인트에 InOut 으로 교환을 보냅니다.

loadBalance()

loadBalance

8.10절. “로드 밸런서”끝점 컬렉션에 대한 로드 밸런싱을 구현합니다.

log()

log

콘솔에 메시지를 기록합니다.

loop()

loop

8.16절. “loop”: 각 교환을 경로의 마지막 부분으로 반복적으로 다시 보냅니다.

markRollbackOnly()

@markRollbackOnly

현재 롤백에 대한 트랜잭션만 표시합니다(예외가 발생하지 않음). XML DSL에서 이 옵션은 rollback 요소에서 부울 속성으로 설정됩니다. Apache Karaf 트랜잭션 가이드를 참조하십시오.

markRollbackOnlyLast()

@markRollbackOnlyLast

하나 이상의 트랜잭션이 이전에 이 스레드와 연결된 후 일시 중지된 경우 이 명령은 롤백에 대한 최신 트랜잭션만 표시합니다(예외 발생 없음). XML DSL에서 이 옵션은 rollback 요소에서 부울 속성으로 설정됩니다. Apache Karaf 트랜잭션 가이드를 참조하십시오.

marshal()

Marshal

특정 전송 프로토콜을 통해 전송하기 위해 지정된 데이터 형식을 사용하여 하위 수준 또는 바이너리 형식으로 변환합니다.

multicast()

멀티 캐스트

8.13절. “멀티 캐스트”: 여러 대상에 대한 현재 교환을 멀티 캐스트하여 각 대상의 자체 복사본을 교환합니다.

onCompletion()

onCompletion

기본 경로가 완료된 후 실행되는 하위 경로(Java DSL에서 end() 로 종료)를 정의합니다. 2.14절. “OnCompletion” 을 참조하십시오.

onException()

onException

지정된 예외가 발생할 때마다 실행되는 하위 경로(Java DSL에서 end() 로 종료)를 정의합니다. 일반적으로 자체 행(경로에 없음)에 정의되어 있습니다.

pipeline()

pipeline

5.4절. “파이프 및 필터”하나의 끝점의 출력이 다음 끝점의 입력이 되는 일련의 끝점으로 교환을 보냅니다. 2.1절. “파이프라인 처리” 을 참조하십시오.

policy()

policy

현재 경로에 정책을 적용합니다(현재는 트랜잭션 정책에서만 사용됨- Cryostat 참조 Apache Karaf 트랜잭션 가이드 ).

pollEnrich(),pollEnrichRef()

pollEnrich

10.1절. “콘텐츠 Enricher”: 지정된 소비자 끝점 URI에서 폴링된 데이터와 현재 교환을 결합합니다.

process(),processRef

process

현재 교환에서 사용자 지정 프로세서를 실행합니다. “사용자 정의 프로세서”III 부. 고급 Camel 프로그래밍 을 참조하십시오.

recipientList()

recipientList

8.3절. “수신자 목록”: 교환을 런타임에 계산된 수신자 목록으로 보냅니다(예: 헤더 내용에 따라 다름).

removeHeader()

removeHeader

교환의 In 메시지에서 지정된 헤더를 제거합니다.

removeHeaders()

removeHeaders

교환의 In 메시지에서 지정된 패턴과 일치하는 헤더를 제거합니다. 패턴의 형식은 prefix\* Cryostat->-<in 이 경우 prefix- Cryostatotherwise로 시작하는 모든 이름과 일치하며 정규식으로 해석됩니다.

removeProperty()

removeProperty

지정된 교환 속성을 제거합니다.

removeProperties()

removeProperties

지정된 패턴과 일치하는 속성을 교환에서 제거합니다. 쉼표로 구분된 1개 이상의 문자열 목록을 인수로 사용합니다. 첫 번째 문자열은 패턴입니다(위의 removeHeaders() 참조). 후속 문자열은 예외를 지정하며 이러한 속성은 그대로 유지됩니다.Subsequent strings specify exceptions - these properties remain.

resequence()

Resequence

8.6절. “Resequencer”: 지정된 비교 작업을 기반으로 들어오는 교환을 다시 주문합니다. 일괄 처리 모드 및 스트림 모드를 지원합니다.

rollback()

rollback

(기본값) 현재 트랜잭션에 대한 롤백만 표시합니다(기본적으로 예외도 발생). Apache Karaf 트랜잭션 가이드를 참조하십시오.

routingSlip()

routingSlip

8.7절. “라우팅 슬립”: 슬립 헤더에서 추출된 끝점 URI 목록을 기반으로 동적으로 구성된 파이프라인을 통해 교환을 라우팅합니다.

sample()

샘플

샘플링 throttler를 생성하여 경로의 트래픽에서 교환 샘플을 추출할 수 있습니다.

setBody()

setBody

교환의 메시지 본문을 설정합니다.

setExchangePattern()

setExchangePattern

현재 교환의 MEP를 지정된 값으로 설정합니다. “메시지 교환 패턴”을 참조하십시오.

setHeader()

setHeader

교환의 In 메시지에 지정된 헤더를 설정합니다.

setOutHeader()

setOutHeader

교환의 아웃 메시지에 지정된 헤더를 설정합니다.

setProperty()

setProperty()

지정된 교환 속성을 설정합니다.

sort()

sort

메시지 본문 의 내용을 정렬합니다(사용자 지정 비교기를 선택적으로 지정할 수 있음).

split()

split

8.4절. “Splitter”: 현재 교환을 일련의 교환으로 분할하여 각 분할 교환에는 원본 메시지 본문의 조각이 포함됩니다.

stop()

중지

현재 교환 라우팅을 중지하고 완료된 것으로 표시합니다.

threads()

스레드

경로의 마지막 부분을 동시에 처리하기 위한 스레드 풀을 생성합니다.

throttle()

throttle

8.8절. “Throttler”: 흐름 속도를 지정된 수준으로 제한합니다(초당 교환).

throwException()

throwException

지정된 Java 예외를 throw합니다.

to()

다음으로 변경

교환을 하나 이상의 엔드포인트로 전송합니다. 2.1절. “파이프라인 처리”을 참조하십시오.

toF()

해당 없음

문자열 형식을 사용하여 교환을 엔드포인트로 보냅니다. 즉, 엔드포인트 URI 문자열은 C Cryostat () 함수의 스타일에 대체를 포함할 수 있습니다.

transacted()

Transacted

경로의 마지막 부분을 포함하는 Spring 트랜잭션 범위를 생성합니다. Apache Karaf 트랜잭션 가이드를 참조하십시오.

transform()

변환

5.6절. “메시지#159”: 메시지 헤더를 Out 메시지 헤더에 복사하고 Out 메시지 본문을 지정된 값으로 설정합니다.

unmarshal()

unmarshal

지정된 데이터 형식을 사용하여 In 메시지 본문을 하위 수준 또는 바이너리 형식에서 상위 수준 형식으로 변환합니다.

validate()

검증

서술자 표현식을 사용하여 현재 메시지가 유효한지 여부를 테스트합니다. 서술자가 false 를 반환하면 PredicateValidationException 예외가 발생합니다.

wireTap()

wireTap

12.3절. “Wire Tap”: ExchangePattern.InOnly MEP를 사용하여 지정된 유선 탭 URI로 현재 교환의 사본을 보냅니다.

1.5.2. 일부 샘플 프로세서

경로에서 프로세서를 사용하는 방법에 대한 몇 가지 아이디어를 얻으려면 다음 예제를 참조하십시오.

1.5.3. 선택

choice() 프로세서는 들어오는 메시지를 대체 생산자 엔드포인트로 라우팅하는 데 사용되는 조건부 명령문입니다. 각 대체 생산자 끝점 앞에는 서술자 인수를 사용하는 when() 메서드 앞에 옵니다. 서술자가 true이면 다음 대상이 선택되고, 처리는 규칙에서 다음 when() 메서드로 진행됩니다. 예를 들어 다음 choice() 프로세서는 Predicate1Predicate2 의 값에 따라 수신 메시지를 Target1,Target2 또는 Target3 으로 보냅니다.

from("SourceURL")
    .choice()
        .when(Predicate1).to("Target1")
        .when(Predicate2).to("Target2")
        .otherwise().to("Target3");

Spring XML과 동일합니다.

<camelContext id="buildSimpleRouteWithChoice" xmlns="http://camel.apache.org/schema/spring">
  <route>
    <from uri="SourceURL"/>
    <choice>
      <when>
        <!-- First predicate -->
        <simple>header.foo = 'bar'</simple>
        <to uri="Target1"/>
      </when>
      <when>
        <!-- Second predicate -->
        <simple>header.foo = 'manchu'</simple>
        <to uri="Target2"/>
      </when>
      <otherwise>
        <to uri="Target3"/>
      </otherwise>
    </choice>
  </route>
</camelContext>

Java DSL에는 endChoice() 명령을 사용해야 할 수 있는 특수한 경우가 있습니다. 일부 표준 Apache Camel 프로세서를 사용하면 특수 하위 복제를 사용하여 추가 매개 변수를 지정할 수 있으며 일반적으로 end() 명령으로 종료되는 추가 중첩 수준을 효과적으로 열 수 있습니다. 예를 들어 로드 밸런서 절을 loadBalance().to("mock:foo").to("mock:bar").end() 로 지정할 수 있습니다. 그러나 로드 밸런서 절이 선택 조건에 포함된 경우 다음과 같이 endChoice() 명령을 사용하여 절을 종료해야 합니다.

from("direct:start")
    .choice()
        .when(bodyAs(String.class).contains("Camel"))
            .loadBalance().roundRobin().to("mock:foo").to("mock:bar").endChoice()
        .otherwise()
            .to("mock:result");

1.5.4. filter

filter() 프로세서는 관심 없는 메시지가 생산자 엔드포인트에 도달하지 못하도록 하는 데 사용할 수 있습니다. 단일 서술자 인수가 필요합니다. 서술자가 true이면 메시지 교환이 생산자를 통해 허용됩니다. 서술자가 false이면 메시지 교환이 차단됩니다. 예를 들어 다음 필터는 들어오는 메시지에 헤더를 포함하지 않는 한 메시지 교환을 차단합니다. foo 값은 bar 와 같습니다.

from("SourceURL").filter(header("foo").isEqualTo("bar")).to("TargetURL");

Spring XML과 동일합니다.

<camelContext id="filterRoute" xmlns="http://camel.apache.org/schema/spring">
  <route>
    <from uri="SourceURL"/>
    <filter>
      <simple>header.foo = 'bar'</simple>
      <to uri="TargetURL"/>
    </filter>
  </route>
</camelContext>

1.5.5. Throttler

throttle() 프로세서는 생산자 엔드포인트가 과부하되지 않도록 합니다. throttler는 초당 전달할 수 있는 메시지 수를 제한하여 작동합니다. 들어오는 메시지가 지정된 속도를 초과하면 throttler는 버퍼에서 초과 메시지를 누적하고 생산자 엔드포인트로 더 느리게 전송합니다. 예를 들어 처리량 속도를 초당 100개 메시지로 제한하려면 다음 규칙을 정의할 수 있습니다.

from("SourceURL").throttle(100).to("TargetURL");

Spring XML과 동일합니다.

<camelContext id="throttleRoute" xmlns="http://camel.apache.org/schema/spring">
  <route>
    <from uri="SourceURL"/>
    <throttle maximumRequestsPerPeriod="100" timePeriodMillis="1000">
      <to uri="TargetURL"/>
    </throttle>
  </route>
</camelContext>

1.5.6. 사용자 정의 프로세서

여기에 설명된 표준 프로세서 중 어느 것도 필요한 기능을 제공하지 않으면 항상 고유한 사용자 지정 프로세서를 정의할 수 있습니다. 사용자 지정 프로세서를 만들려면 org.apache.camel.Processor 인터페이스를 구현하고 process() 메서드를 재정의하는 클래스를 정의합니다. 다음 사용자 지정 프로세서인 MyProcessor 는 들어오는 메시지에서 foo 라는 헤더를 제거합니다.

예 1.3. 사용자 지정 프로세서 클래스 구현

public class MyProcessor implements org.apache.camel.Processor {
public void process(org.apache.camel.Exchange exchange) {
  inMessage = exchange.getIn();
  if (inMessage != null) {
      inMessage.removeHeader("foo");
  }
}
};

사용자 지정 프로세서를 라우터 규칙에 삽입하려면 프로세스에 프로세서를 삽입하는 일반적인 메커니즘을 제공하는 process() 메서드를 호출합니다. 예를 들어 다음 규칙은 예 1.3. “사용자 지정 프로세서 클래스 구현” 에 정의된 프로세서를 호출합니다.

org.apache.camel.Processor myProc = new MyProcessor();

from("SourceURL").process(myProc).to("TargetURL");
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.