6장. 라우팅 컨텍스트에 다른 경로 추가


이 튜토리얼에서는 ZooOrderApp 프로젝트의 블루프린트.xml 파일에서 camel 컨텍스트에 두 번째 경로를 추가하는 방법을 보여줍니다. 두 번째 경로:

  • 첫 번째 경로의 기타 분기의 터미널 끝에서 메시지(유효한 주문)를 가져옵니다.
  • 고객 국가에 따라 유효한 메시지를 정렬합니다.
  • 각 메시지를 ZooOrderApp/target/messages 폴더의 해당 국가 폴더에 보냅니다. 예를 들어, 시카고 Zoo의 주문은 미국 폴더에 복사됩니다.

6.1. 목표

이 튜토리얼에서는 다음 작업을 완료합니다.

  • 두 번째 경로로 직접 연결하기 위해 기존 경로 재구성
  • Camel 컨텍스트에 두 번째 경로 추가
  • 첫 번째 경로의 기타 분기에서 메시지를 직접 가져오도록 두 번째 경로를 구성합니다.
  • 두 번째 경로에 콘텐츠 기반 라우터 추가
  • 두 번째 경로의 콘텐츠 기반 라우터의 각 출력 분기에 메시지 헤더, 로깅 및 대상 대상을 추가하고 구성합니다.

6.2. 사전 요구 사항

이 튜토리얼을 시작하려면 다음 중 하나에서 생성된 ZooOrderApp 프로젝트가 필요합니다.

6.3. 기존 경로의 끝점 재구성

기존 경로는 모든 유효한 주문을 target/messages/validOrders 폴더에 보냅니다.

이 섹션에서는 기존 경로의 엔드포인트를 다시 구성하여 대신 두 번째 경로(다음 섹션에서 생성하는)에 연결합니다.

두 번째 경로와 직접 연결하기 위해 기존 경로를 구성하려면 다음을 수행합니다.

  1. 경로 편집기에서 ZooOrderApp/src/main/resources/OSGI-INF/blueprint/blueprint.xml 을 엽니다.
  2. 캔버스에서 Route_route1 컨테이너를 선택하여 속성 보기에서 해당 속성을 엽니다.
  3. 아래로 스크롤하여 Route 속성으로 이동한 다음 기본값 을 선택합니다.
  4. 캔버스에서 터미널 파일 노드 To_Valid 를 선택하여 속성 보기에 해당 속성을 표시합니다.
  5. Uri 필드에 기존 텍스트를 삭제한 다음 direct:OrderFulfillment 를 입력합니다.
  6. Id 필드에 _Fulfill 을 입력합니다.
참고

기존 To_Valid 터미널 파일 노드를 교체하는 대신 Components Direct 구성 요소로 교체하여 용도 변경된 To_Valid 노드와 동일한 속성 값으로 구성할 수 있습니다.

직접 구성 요소에 대한 자세한 내용은 Apache Camel 구성 요소 참조를 참조하십시오.

6.4. 두 번째 경로 추가

라우팅 컨텍스트에 다른 경로를 추가하려면 다음을 수행합니다.

  1. Personlets 에서 라우팅 서랍을 열고 경로 ( Route icon ) 패턴을 클릭합니다.
  2. 캔버스에서 Route_route1 컨테이너의 오른쪽을 클릭합니다.

    경로 패턴은 캔버스의 Route_route2 컨테이너 노드가 됩니다.

  3. Route_route2 컨테이너 노드를 클릭하여 속성 보기에 해당 속성을 표시합니다. 속성을 그대로 둡니다.
  4. 파일을 저장합니다.
참고

라우팅 컨텍스트가 복잡성이 증가함에 따라 작업하는 동안 경로 편집기에 개별 경로에 중점을 둘 수 있습니다. 이렇게 하려면 Project Explorer 에서 경로 편집기가 캔버스에 표시할 경로를 두 번 클릭합니다(예: Route_route2 ).

캔버스의 라우팅 컨텍스트의 모든 경로를 표시하려면 Camel 컨텍스트 폴더 상단에 있는 프로젝트의 .xml 컨텍스트 파일 항목(src/main/resources/OSGI-INF/…​)을 두 번 클릭합니다.

6.5. 미국 주문을 처리하기 위해 선택 분기 구성

이 섹션에서는 경로에 선택 분기를 추가하고 미국 주문을 새 target/messages/validOrders/USA 폴더에 전송하도록 경로를 구성합니다. 메시지 헤더 및 로그 파일 구성 요소도 설정합니다.

  1. selet 에서 구성 요소 서랍을 열고 직접 구성 요소( Direct icon )를 선택합니다.
  2. 캔버스에서 Route_route2 컨테이너를 클릭합니다.

    Route_route2 컨테이너는 직접 구성 요소( From_from2 노드)를 수용하도록 확장됩니다.

  3. 캔버스에서 From_from2 노드를 클릭하여 속성 보기에서 속성을 엽니다.
  4. Uri 필드에서 name ( 직접:)을 OrderFulfillment 로 바꾸고 Id 필드에 _direct:OrderFulfillment 를 입력합니다.

  5. selet 에서 Routing drawer를 열고 선택 ( Choice icon ) 패턴을 선택합니다.
  6. 캔버스에서 From _direct:OrderFulfillment 노드를 클릭합니다.

    Route_route2 컨테이너가 확장되어 Choice_choice2 노드를 수용합니다.

    속성 보기에서 Choice_choice2 노드의 속성을 그대로 둡니다.

  7. selet에서 Routing drawer를 열고 When ( When icon ) 패턴을 선택합니다.
  8. 캔버스에서 Choice_choice2 노드를 클릭합니다.

    Choice_choice2 컨테이너는 When_when2 노드를 수용하도록 확장됩니다.

  9. 캔버스에서 When_when2 노드를 선택하여 속성 보기에서 해당 속성을 엽니다.
  10. 다음과 같이 When_when2 노드의 속성을 설정합니다.

    • Expression 드롭다운 목록에서 xpath 를 선택합니다.
    • 들여쓰기된 표현식 필드에 /order/customer/country = 'USA' 를 입력합니다.
    • Trim 을 활성화한 상태로 둡니다.
    • 두 번째 Id 필드에 _when/usa를 입력합니다.

  11. selet 에서 Components drawer를 열고 파일 구성 요소( File icon )를 선택합니다.
  12. 캔버스에서 When_when/usa 컨테이너를 클릭합니다.

    When_when/usa 컨테이너가 확장되어 To_to1 노드를 수용할 수 있습니다.

  13. 속성 보기에서 다음을 수행합니다.

    • Uri 필드에서 directoryNametarget/messages/validOrders/USA 로 바꿉니다.
    • Id 필드에 _US 를 입력합니다.
  14. 파일을 저장합니다.

메시지 헤더를 설정하고 로그 구성 요소를 추가하려면 다음을 수행합니다.

  1. Person lets 에서 drawer 열고 Set Header 패턴을 선택합니다.
  2. 캔버스에서 When_when/usa 노드를 클릭합니다.

    When_when/usa 컨테이너가 확장되어 SetHeader_setHeader3 노드를 수용합니다.

  3. 캔버스에서 SetHeader_setHeader3 노드를 선택하여 속성 보기에서 해당 속성을 엽니다.
  4. 다음과 같이 노드의 속성을 설정합니다.

    • Expression 드롭다운 메뉴에서 상수 를 선택합니다.
    • 들여쓰기된 표현식 필드에 다음과 같이 입력합니다. USA
    • Trim 을 활성화한 상태로 둡니다.
    • 헤더 이름 필드에: 대상을 입력합니다.
    • 두 번째 Id 필드에 _setHead_usa를 입력합니다.

  5. selet 에서 Components drawer를 열고 로그 구성 요소( Log icon )를 선택합니다.
  6. 캔버스에서 SetHeader 노드를 클릭합니다.

    When_when/usa 컨테이너가 확장되어 Log_log3 노드를 수용합니다.

  7. 캔버스에서 Log_log3 노드를 선택하여 속성 보기에서 해당 속성을 엽니다.

  8. 속성 보기에서 다음을 수행합니다.

    • Message 필드에 Valid order - 미국 고객에게 LUN을 제공합니다.
    • Id 필드에 _usa 를 입력합니다.
    • 로깅 수준을 그대로 둡니다.

  9. 파일을 저장합니다.

    Route_route2 의 미국 분기는 다음과 같아야 합니다.

6.6. 독일 주문을 처리하기 위해 otherwise 분기 구성

캔버스에 Route_route2 가 표시되는 경우:

  1. selet 에서 Routing drawer를 열고 otherwise 패턴( Otherwise icon )을 선택합니다.
  2. 캔버스에서 Choice_choice2 컨테이너를 클릭합니다.

    Choice_choice2 컨테이너는 otherwise_otherwise1 노드를 수용하도록 확장됩니다.

  3. otherwise_otherwise1 노드를 선택하여 Properties 보기에서 속성을 엽니다.
  4. 속성 보기에서 Id 필드에 _else/ger 를 입력합니다.
  5. selet 에서 drawer를 열고 Set Header 패턴( Set Header icon )을 선택합니다.
  6. 캔버스에서 otherwise _else/ger 노드를 클릭합니다.

    Otherwise_else/ger 컨테이너는 확장되어 SetHeader_setHeader3 노드를 수용합니다.

  7. 캔버스에서 SetHeader_setHeader3 노드를 선택하여 속성 보기에서 해당 속성을 엽니다.
  8. 속성 보기에서 다음을 수행합니다.

    • Expression 드롭다운 목록에서 상수 를 선택합니다.
    • 두 번째 표현식 필드에 Germany 을 입력합니다.
    • 트리밍 을 그대로 둡니다.
    • 헤더 이름 필드에 대상 을 입력합니다.
    • 두 번째 Id 필드에 _setHead_ger 를 입력합니다.
  9. selet 에서 Components drawer를 열고 로그 패턴( Log icon )을 선택합니다.
  10. 캔버스에서 SetHeader_setHead_ger 노드 아래를 클릭합니다.

    Otherwise_else/ger 컨테이너는 Log_log3 노드를 수용하도록 확장됩니다. 필요한 경우 Log_log3 노드에서 SetHeader_setHead_ger 노드로 커넥터 오류를 드래그합니다.

  11. 캔버스에서 Log_log3 노드를 선택하여 속성 보기에서 해당 속성을 엽니다.
  12. 속성 보기에서 다음을 수행합니다.

    • Message 필드에 Valid order - 발송물 독일 고객에게 있습니다.
    • Id 필드에 _ger 를 입력합니다.
    • 로깅 수준을 그대로 둡니다.
  13. 구성 요소 서랍에서 파일 패턴( File icon )을 선택한 다음 Log_ger 노드 아래에서 클릭합니다.

    Otherwise_else/ger 컨테이너는 확장되어 To_to1 노드를 수용할 수 있습니다. 필요한 경우 SetHeader_setHead_ger 노드에서 To_to1 노드로 커넥터 오류를 드래그합니다.

  14. 캔버스에서 To_to1 노드를 선택하여 속성 보기에서 해당 속성을 엽니다.
  15. 속성 보기에서 다음을 수행합니다.

    • Uri 필드에서 directoryNametarget/messages/validOrders/Germany로 바꿉니다.
    • Id 필드에 _GER 를 입력합니다.
  16. 파일을 저장합니다.

Route_route2 의 독일 분기는 다음과 같아야 합니다.

6.7. 두 번째 경로 확인

캔버스의 경로는 다음과 같아야 합니다.

완료된 route1

완료된 route2

캔버스 하단의 소스 탭에서 camelContext 요소의 XML은 예 6.1. “이중 경로 콘텐츠 기반 라우터를 위한 XML” 에 표시된 것과 같아야 합니다.

예 6.1. 이중 경로 콘텐츠 기반 라우터를 위한 XML

<?xml version="1.0" encoding="UTF-8"?>

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0
    https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
    http://camel.apache.org/schema/blueprint
    http://camel.apache.org/schema/blueprint/camel-blueprint.xsd">

    <camelContext id="_context1" xmlns="http://camel.apache.org/schema/blueprint">
       <route id="_route1" shutdownRoute="Default">
           <from id="_from1" uri="file:src/data?noop=true"/>
           <choice id="_choice1">
               <when id="_when1">
                   <xpath>/order/orderline/quantity/text() &gt; 10</xpath>
                   <log id="_log1" message="The quantity requested exceeds the maximum allowed - contact customer."/>
                   <setHeader headerName="Destination" id="_setHeader1">
                       <constant>Invalid</constant>
                   </setHeader>
                   <to id="_Invalid" uri="file:target/messages/invalidOrders"/>
               </when>
               <otherwise id="_elseValid">
                   <log id="_log2" message="This is a valid order - OK to process."/>
                   <setHeader headerName="Destination" id="_setHeader2">
                       <constant>ReadyForDispatcher</constant>
                   </setHeader>
                   <to id="_Fulfill" uri="direct:OrderFulfillment"/>
               </otherwise>
           </choice>
       </route>
       <route id="_route2">
           <from id="_direct:OrderFulfillment" uri="direct:OrderFulfillment"/>
           <choice id="_choice2">
               <when id="when/usa">
                   <xpath>/order/customer/country = 'USA'</xpath>
                   <log id="_usa" message="Valid order - ship animals to USA customer"/>
                   <setHeader headerName="Destination" id="_setHead_usa">
                       <constant>USA</constant>
                   </setHeader>
                   <to id="_US" uri="file:target/messages/validOrders/USA"/>
               </when>
               <otherwise id="_else/ger">
                   <log id="_ger" message="Valid order - ship animals to Germany customer"/>
                   <setHeader headerName="Destination" id="_setHead_ger">
                       <constant>Germany</constant>
                   </setHeader>
                   <to id="_GER" uri="file:target/messages/validOrders/Germany"/>
               </otherwise>
           </choice>
       </route>
   </camelContext>
</blueprint>
Copy to Clipboard Toggle word wrap
중요

툴링에서 두 번째 경로 요소( <routeid="route2"> )에 shutdownRoute=" " 속성을 추가한 경우 해당 속성을 삭제합니다. 그렇지 않으면 ZooOrderApp 프로젝트가 실행되지 않을 수 있습니다.

업데이트된 프로젝트가 예상대로 작동하는지 확인하려면 다음 단계를 따르십시오.

  1. ZooOrderApp/Camel Contexts/blueprint.xml 을 로컬 Camel Context(테스트 제외)로 실행합니다.
  2. 콘솔 출력의 끝을 확인합니다. 다음 행이 표시됩니다.

  3. 대상 대상 폴더를 확인하여 경로가 올바르게 실행되었는지 확인합니다.

    1. Project Explorer 에서 ZooOrderApp 을 마우스 오른쪽 버튼으로 클릭한 다음 새로 고침을 선택합니다.
    2. target/messages/ 폴더를 확장합니다.

      다음과 같이 message*.xml 파일은 대상에 분산되어야 합니다.

      그림 6.1. Project Explorer의 대상 메시지 대상

6.8. 다음 단계

다음 튜토리얼에서 7장. 라우팅 컨텍스트 디버깅 에서는 Fuse Tooling 디버거를 사용하는 방법을 알아봅니다.

맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

Theme

© 2025 Red Hat