Apache Camel의 미세한 탭 모드와 메인 라인을 비동기적으로 처리합니다

8012 단어 apache-camel
Apache Camel의 미세한 탭 모드와 메인 라인을 비동기적으로 처리합니다
응답이 필요하지 않습니다. 현재 메시지를 백그라운드에서 비동기적으로 처리하려면 Wire Tap 모드를 사용합니다.
예를 들어 주 경로와 달리 백엔드 시스템에 Logging 정보를 보내는 데 사용할 수 있습니다.

다음은 XML DSL의 루트 정의 예입니다.wireTap 요소의 Wire Tap 모드를 지정하고 uri 옵션에서 목적지를 보내는 끝점을 지정합니다.
        <route>
            <from uri="direct:start" />
            <log message="main start" />
            <wireTap uri="direct:tap" />
            <log message="main end" />
        </route>
Java DSL은 다음과 같습니다.
                    from("direct:start")
                        .log("main start")
                        .wireTap("direct:tap")
                        .log("main end");
WireTap의 메시지는 다른 단서에서 처리되며, 주 경로의 처리는 처리 결과를 기다리지 않고 계속됩니다.다른 단서에서 처리되기 때문에 WireTap에서 오류가 발생하더라도 주 경로에는 영향을 주지 않습니다.
마이크로탭 모드와 멀티캐스트 모드의 차이
마이크로탭 모드와 비슷한 모드에는 Multicast 모드가 있습니다.
Multicast 모드는 Wire Tap 모드와 비슷하게 여러 엔드포인트에서 동시에 메시지를 처리합니다.
마이크로탭 모드와 멀티캐스트 모드의 차이는 다음과 같습니다.
4
  • Multicast 모드에서 여러 엔드포인트에 메시지를 보냅니다.Wire Tap 모드는 메인 라인과 달리 끝점이 하나만 있습니다
  • 4
  • Multicast 모드에서는 병렬 처리 메시지를 모을 수 있습니다.다른 한편, 마이크로탭 모드에서는 한 방향으로만 보내는 메시지에 대한 응답을 받을 수 없습니다
  • Exchange의 얕은 복사본(Shallow Copy) 및 딥 복사본(Deep Copy)
    마이크로탭에서는 Exchange의 간단한 복제본이 기본적으로 생성됩니다.얕은 복사본은 원본 메시지 BODY와 같은 객체이기 때문에 마이크로탭 경로에서 객체를 변경하면 호출된 메시지도 수정될 수 있습니다.
    이런 상황을 피하기 위해서도 심층 복사로 실현할 수 있다.
    WireTap 요소의 onPreptureRef 옵션을 사용하여 깊이 있는 복사를 사용할 수 있습니다.
    onProepareRef 옵션은WireTap을 미리 처리하는 프로세서를 지정하여 이 프로세서 안에서 다음과 같은 깊이 있는 복사를 할 수 있습니다.
            <route>
                <from uri="direct:start" />
                <setBody><simple>${bean:item?method=getNewItem('org_name', 'org_value')}</simple></setBody>
                <log message="start1" />
                <wireTap uri="direct:tap" onPrepareRef="itemClone" />
                <delay><simple>3000</simple></delay>
                <log message="main: ${body.getName}" />
            </route>
    
    메시지의 BODY에 다음 Item 클래스의 인스턴스가 저장됩니다.
    깊이 있는 복제를 위한 deepClone 방법도 설치했다.
    public class Item {
    
        private String name;
        private String value;
    
    省略
        public Item deepClone() {
            Item item = new Item();
            item.name = this.name;
            item.value = this.value;
            return item;
        }
    }
    
    
    사전 처리를 하는 프로세서는 일반적인 프로세서와 마찬가지로 Processor 인터페이스를 실현하는 프로세스 방법입니다.
    다음 프로세스 방법은 Item 클래스의 deepClone 방법을 통해 매우 깊은 복사 실례를 얻어 BODY로 설정합니다.
    public class ItemClonePrepareProcessor implements Processor {
    
        @Override
        public void process(Exchange exchange) throws Exception {
            Item item = exchange.getIn().getBody(Item.class);
            exchange.getIn().setBody(item.deepClone());
        }
    }
    
    이렇게 하면 마이크로탭 모드에서 깊은 복사를 실현할 수 있으며, 얕은 복사처럼 WireTap 이전에 메인 경로에 영향을 주지 않는다.
    또한 복사본 대신 새 메시지를 만들고 WireTap을 사용할 수도 있습니다.이 경우 processor Ref 옵션을 사용하여 새 메시지를 만들 수 있는 프로세서를 만들 수 있습니다.
    마이크로탭 프로세서 옵션 요약
    마이크로탭 프로세서의 옵션은 다음 표와 같습니다.
    속성 이름
    기본값
    타입
    설명
    executorServiceRef
    WireTap 메시지를 병렬 처리하는 데 사용되는 사용자 정의 스레드 풀의 ID를 참조합니다.
    processorRef
    WireTap에서 메시지를 복사하는 대신 새 메시지를 만드는 사용자 정의 프로세서를 정의합니다.
    copy
    true
    boolean
    WireTap 메시지의 Exchange 복사 여부를 지정합니다.기본적으로 진실 (복사) 입니다. 프로세스erRef를 지정하려면 가짜를 설정하십시오.
    onPrepareRef
    WireTap 메시지를 Exchange 복제하기 전에 미리 처리해야 할 경우 사용자 지정 프로세서의 ID를 지정합니다.WireTap에서 복사한 편지는 얕은 복사본으로 깊은 복사를 실현하는 데 사용됩니다.
    cacheSize
    1000
    int
    재활용 캐시 프로세서의 ProducterCache 캐시 크기를 설정할 수 있습니다.기본적으로 1000개의 기본 캐시 크기가 사용됩니다.값을 -1로 설정하면 캐시를 병합하고 닫을 수 있습니다.(잘 모르겠습니다)
    ignoreInvalidEndpoint
    false
    boolean
    해결할 수 없는 끝점 URI 무시 여부가짜의 경우 Camel이 잘못된 끝점 URI를 인식하는 동안 예외를 던집니다.
    참고 자료
  • 마이크로 탭
  • Enterprise Integration Patterns - Wire Tap
  • Apache Camel Wire Tap Examples
  • 좋은 웹페이지 즐겨찾기