34장. 메시지 형식 이해

초록

Apache Camel로 프로그래밍을 시작하기 전에 메시지와 메시지 교환을 모델링하는 방법을 명확하게 이해해야 합니다. Apache Camel은 많은 메시지 형식을 처리할 수 있으므로 기본 메시지 유형은 추상 형식으로 설계되었습니다. Apache Camel은 메시지 본문 및 메시지 헤더에 따라 데이터 형식에 액세스하고 변환하는 데 필요한 API를 제공합니다.

34.1. 교환

34.1.1. 개요

교환 오브젝트 는 수신된 메시지를 캡슐화하고 연결된 메타데이터(배치 속성포함)를 저장하는 래퍼입니다. 또한 현재 메시지가 생산자 엔드포인트에 디스패치되는 경우 교환은 응답을 유지할 임시 슬롯( Out 메시지)을 제공합니다.

Apache Camel의 교환의 중요한 기능은 지연 메시지 생성을 지원한다는 것입니다. 이는 메시지에 대한 명시적 액세스가 필요하지 않은 경로의 경우 상당한 최적화를 제공할 수 있습니다.

그림 34.1. 경로를 통해 오브젝트 전달 교환

경로를 통해 전달되는 개체 교환

그림 34.1. “경로를 통해 오브젝트 전달 교환” 경로를 통과하는 교환 오브젝트를 표시합니다. 경로 컨텍스트에서 교환 오브젝트는 Processor.process() 메서드의 인수로 전달됩니다. 즉, 교환 오브젝트는 소스 끝점, 대상 끝점 및 그 사이의 모든 프로세서에 직접 액세스할 수 있습니다.

34.1.2. 교환 인터페이스

org.apache.camel.Exchange 인터페이스는 예 34.1. “교환 방법” 와 같이 InOut 메시지에 액세스하는 방법을 정의합니다.

예 34.1. 교환 방법

// Access the In message
Message getIn();
void    setIn(Message in);

// Access the Out message (if any)
Message getOut();
void    setOut(Message out);
boolean hasOut();

// Access the exchange ID
String  getExchangeId();
void    setExchangeId(String id);

교환 인터페이스의 방법에 대한 자세한 내용은 43.1절. “교환 인터페이스” 을 참조하십시오.

34.1.3. 메시지 생성 지연

Apache Camel은 In,OutFault 메시지 지연 생성을 지원합니다. 즉, getIn() 또는 getOut()을 호출하여 액세스하려고 할 때까지 메시지 인스턴스가 생성되지 않습니다. lazy 메시지 생성 의미 체계는 org.apache.camel.impl.DefaultExchange 클래스에 의해 구현됩니다.

no-argument 접근자(getIn() 또는 getOut()) 중 하나를 호출하거나 부울 인수를 true (즉, getIn(true) 또는 getOut(true)로 호출하면 기본 메서드 구현에서 새 메시지 인스턴스를 생성합니다.

false (즉, getIn(false) 또는 getOut(false)와 같은 부울 인수를 사용하여 접근자를 호출하면 기본 메서드 구현에서 현재 메시지 값을 반환합니다.[1]

34.1.4. 교환 ID 생성 지연

Apache Camel은 교환 ID의 지연 생성을 지원합니다. 모든 교환에서 getExchangeId() 를 호출하여 해당 교환 인스턴스에 대한 고유 ID를 가져올 수 있지만 실제로 메서드를 호출하는 경우에만 ID가 생성됩니다. 이 메서드의 DefaultExchange.getExchangeId() 구현은 ID 생성을 CamelContext 에 등록된 UUID 생성기에 위임합니다.

CamelContext 에 UUID 생성기를 등록하는 방법에 대한 자세한 내용은 34.4절. “내장된 UUID 생성기” 을 참조하십시오.



[1] 활성 메서드가 없으면 반환된 값은 null 입니다.