검색

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

download PDF

이 튜토리얼에서는 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 컨테이너의 오른쪽을 클릭합니다.

    tutRte2DropOnCanvas

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

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

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

tutProjExSwitchRtesOnCanvas

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

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

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

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

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

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

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

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

    tutCBRrte2Choice2Added

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      tutCBRrte2Log3usaAdded
  9. 파일을 저장합니다.

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

    tutUSAbranchRte2

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

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

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

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

    tutCBRrte2WhenGERAdd
  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 노드를 수용합니다.

    tutCBRrte2SetHeadGERAdd
  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 노드로 커넥터 오류를 드래그합니다.

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

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

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

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

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

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

tutGERbranchRte2

6.7. 두 번째 경로 확인

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

완료된 route1

ZooOrderApp 라우팅 컨텍스트에서 첫 번째 경로 완료

완료된 route2

ZooOrderApp 라우팅 컨텍스트에서 두 번째 경로 완료

캔버스 하단의 소스 탭에서 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>
중요

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

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

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

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

© 2024 Red Hat, Inc.