42장. 생산자 인터페이스
초록
이 장에서는 Apache Camel 구성 요소를 구현하는 데 중요한 단계인 Producer 인터페이스를 구현하는 방법을 설명합니다.
42.1. Producer 인터페이스
42.1.1. 개요
org.apache.camel.Producer 유형의 인스턴스는 경로의 대상 끝점을 나타냅니다. 생산자의 역할은 요청(메시지에서 )을 특정 물리적 엔드포인트에 전송하고 해당 응답(아웃 또는 Fault 메시지)을 수신하는 것입니다. Producer
오브젝트는 기본적으로 프로세서
체인의 끝에 표시되는 특수 종류의 프로세서입니다(경로와 동일). 그림 42.1. “생산자 Inheritance Hierarchy” 생산자의 상속 계층 구조를 표시합니다.
그림 42.1. 생산자 Inheritance Hierarchy
42.1.2. Producer 인터페이스
예 42.1. “생산자 인터페이스” org.apache.camel.Producer
인터페이스의 정의를 보여줍니다.
예 42.1. 생산자 인터페이스
package org.apache.camel; public interface Producer extends Processor, Service, IsSingleton { Endpoint<E> getEndpoint(); Exchange createExchange(); Exchange createExchange(ExchangePattern pattern); Exchange createExchange(E exchange); }
42.1.3. 생산자 메서드
Producer 인터페이스는 다음 방법을 정의합니다.
-
process()
(프로세서에서 상속됨) - 가장 중요한 메서드입니다. 생산자는 기본적으로 교환 오브젝트를 다른 프로세서로 전달하는 대신 엔드포인트에 요청을 전송하는 특수 유형의 프로세서입니다.process()
메서드를 재정의하면 생산자가 관련 엔드포인트로 메시지를 보내고 수신하는 방법을 정의합니다. -
getEndpoint()
Cryostat-WITH parent endpoint 인스턴스에 대한 참조입니다. -
createExchange()
Cryostat-property overloaded 메서드는 Endpoint 인터페이스에 정의된 해당 메서드와 유사합니다. 일반적으로 이러한 메서드는 상위 끝점 인스턴스에 정의된 해당 메서드에 위임됩니다(기본적으로DefaultEndpoint
클래스가 수행하는 사항임). 이러한 방법을 재정의해야 하는 경우도 있습니다.
42.1.4. 비동기 처리
프로듀서에서 교환 오브젝트를 처리하는 경우 일반적으로 메시지를 원격 대상으로 전송하고 response Cryostat- Cryostatcan을 기다리는 작업이 상당한 시간 동안 차단될 수 있습니다. 현재 스레드를 차단하지 않으려면 생산자를 비동기 프로세서 로 구현하도록 선택할 수 있습니다. 비동기 처리 패턴은 이전 프로세서를 생산자와 분리하여 process()
메서드가 지연 없이 반환되도록 합니다. 38.1.4절. “비동기 처리”을 참조하십시오.
생산자를 구현할 때 org.apache.camel.AsyncProcessor 인터페이스를 구현하여 비동기 처리 모델을 지원할 수 있습니다. 그 자체로는 비동기 처리 모델이 사용되는지 확인하는 것만으로는 충분하지 않습니다. 체인의 이전 프로세서가 process()
메서드의 비동기 버전을 호출하는 것도 필요합니다. AsyncProcessor 인터페이스의 정의는 예 42.2. “AsyncProcessor Interface” 에 표시됩니다.
예 42.2. AsyncProcessor Interface
package org.apache.camel; public interface AsyncProcessor extends Processor { boolean process(Exchange exchange, AsyncCallback callback); }
process()
메서드의 비동기 버전은 org.apache.camel.AsyncCallback 유형의 추가 인수인 콜백
을 사용합니다. 해당 AsyncCallback 인터페이스는 예 42.3. “AsyncCallback Interface” 에 표시된 대로 정의됩니다.
예 42.3. AsyncCallback Interface
package org.apache.camel; public interface AsyncCallback { void done(boolean doneSynchronously); }
AsyncProcessor.process()
의 호출자는 처리가 완료되었다는 알림을 수신하기 위해 AsyncCallback의 구현을 제공해야 합니다. AsyncCallback.done()
메서드는 처리가 동기적으로 수행되었는지 여부를 나타내는 부울 인수를 사용합니다. 일반적으로 플래그는 비동기 처리를 나타내는 false
입니다. 그러나 경우에 따라 생산자가 비동기적으로 처리되지 않는 것이 적절할 수 있습니다(요청을 받는 경우). 예를 들어 생산자가 교환 처리가 빠르게 완료된다는 것을 알고 있으면 동기적으로 처리를 수행하여 처리를 최적화할 수 있습니다. 이 경우 doneSynchronously
플래그를 true
로 설정해야 합니다.
42.1.5. ExchangeHelper 클래스
프로듀서를 구현할 때 org.apache.camel.util.ExchangeHelper
유틸리티 클래스에서 일부 메서드를 호출하는 것이 도움이 될 수 있습니다. ExchangeHelper
클래스에 대한 자세한 내용은 35.4절. “ExchangeHelper 클래스” 을 참조하십시오.