42.2. Producer 인터페이스 구현
42.2.1. 생산자를 구현하는 다른 방법
다음 방법 중 하나로 생산자를 구현할 수 있습니다.
42.2.2. 동기 생산자를 구현하는 방법
예 42.4. “DefaultProducer 구현” 동기 생산자를 구현하는 방법을 간략하게 설명합니다. 이 경우 응답을 수신할 때까지 Producer.process()
블록을 호출합니다.
예 42.4. DefaultProducer 구현
import org.apache.camel.Endpoint; import org.apache.camel.Exchange; import org.apache.camel.Producer; import org.apache.camel.impl.DefaultProducer; public class CustomProducer extends DefaultProducer { 1 public CustomProducer(Endpoint endpoint) { 2 super(endpoint); // Perform other initialization tasks... } public void process(Exchange exchange) throws Exception { 3 // Process exchange synchronously. // ... } }
개요에서 process()
메서드는 일반적으로 다음과 같이 구현됩니다.
- 교환에 In 메시지가 포함되어 있고 지정된 교환 패턴과 일치하는 경우 In 메시지를 지정된 엔드포인트로 보냅니다.
-
교환 패턴에서 Out 메시지를 수신할 것으로 예상되는 경우 Out 메시지가 수신될 때까지 기다립니다. 이 경우
process()
메서드가 상당한 시간 동안 차단됩니다. -
응답이 수신되면
exchange.setOut()
을 호출하여 응답을 교환 오브젝트에 연결합니다. 응답에 fault 메시지가 포함된 경우Message.setFault(true)
를 사용하여 Out 메시지의 fault 플래그를 설정합니다.
42.2.3. 비동기 생산자 구현 방법
예 42.5. “CollectionProducer 구현” 비동기 생산자를 구현하는 방법을 간략하게 설명합니다. 이 경우 동기 프로세스() 메서드와 비동기 프로세스()
메서드를 모두 구현해야 합니다(추가 AsyncCallback
인수를 사용합니다).
예 42.5. CollectionProducer 구현
import org.apache.camel.AsyncCallback; import org.apache.camel.AsyncProcessor; import org.apache.camel.Endpoint; import org.apache.camel.Exchange; import org.apache.camel.Producer; import org.apache.camel.impl.DefaultProducer; public class _CustomProducer_ extends DefaultProducer implements AsyncProcessor { 1 public _CustomProducer_(Endpoint endpoint) { 2 super(endpoint); // ... } public void process(Exchange exchange) throws Exception { 3 // Process exchange synchronously. // ... } public boolean process(Exchange exchange, AsyncCallback callback) { 4 // Process exchange asynchronously. CustomProducerTask task = new CustomProducerTask(exchange, callback); // Process 'task' in a separate thread... // ... return false; 5 } } public class CustomProducerTask implements Runnable { 6 private Exchange exchange; private AsyncCallback callback; public CustomProducerTask(Exchange exchange, AsyncCallback callback) { this.exchange = exchange; this.callback = callback; } public void run() { 7 // Process exchange. // ... callback.done(false); } }
- 1
org.apache.camel.impl.DefaultProducer
클래스를 확장하고 AsyncProcessor 인터페이스를 구현하여 사용자 지정 비동기 생산자 클래스인 CustomProducer 를 구현합니다.- 2
- 상위 끝점에 대한 참조를 사용하는 생성자를 구현합니다.
- 3
- 동기
프로세스()
메서드를 구현합니다. - 4
- 비동기
프로세스()
메서드를 구현합니다. 비동기 메서드를 여러 가지 방법으로 구현할 수 있습니다. 여기에 표시된 접근 방식은 하위 스레드에서 실행되는 코드를 나타내는java.lang.Runnable
인스턴스인task
를 생성하는 것입니다. 그런 다음 Java 스레딩 API를 사용하여 하위 스레드에서 작업을 실행합니다(예: 새 스레드를 생성하거나 기존 스레드 풀에 작업을 할당하여). - 5
- 일반적으로 비동기
프로세스()
메서드에서false
를 반환하여 교환이 비동기적으로 처리되었음을 나타냅니다. - 6
CustomProducerTask
클래스는 하위 스레드에서 실행되는 처리 코드를 캡슐화합니다. 이 클래스는Exchange
개체의 복사본,교환
및AsyncCallback
개체,콜백
을 프라이빗 멤버 변수로 저장해야 합니다.- 7
run()
메서드에는 In 메시지를 생산자 엔드포인트에 전송하고 응답을 수신할 때까지 대기하는 코드가 포함되어 있습니다. 응답(Out message 또는 Fault message)을 수신하고 이를 교환 오브젝트에 삽입한 후callback.done()
을 호출하여 호출자에게 처리가 완료되었음을 알려야 합니다.