7장. 라우팅 컨텍스트 디버깅


이 튜토리얼에서는 Camel 디버거를 사용하여 로컬에서 실행 중인 라우팅 컨텍스트에 대한 논리 오류를 찾는 방법을 보여줍니다.

7.1. 목표

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

  • 두 경로에 관심 있는 노드에 있는 Cryostat를 설정합니다.
  • 디버그 관점에서 경로를 살펴보고 메시지 변수 값을 검사합니다.
  • 경로를 다시 진행하여 메시지 변수의 값을 변경하고 효과를 관찰합니다.

7.2. 사전 요구 사항

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

7.3. Cryostat 설정

Debugger에서는 조건적 및 무조건적 Cryostat를 둘 다 설정할 수 있습니다. 이 튜토리얼에서는 unconditional Cryostat만 설정합니다. 디버깅 세션 중에 특정 조건이 충족될 때 트리거되는 조건부 Cryostat를 설정하는 방법을 알아보려면 도구 사용자 가이드를 참조하십시오.

unconditional Cryostats를 설정하려면 다음을 수행합니다.

  1. 필요한 경우 경로 편집기에서 ZooOrderApp/src/main/resources/OSGI-INF/blueprint/blueprint.xml 을 엽니다.
  2. Project Explorer 에서 Camel Contexts src/main/resources/OSGI-INF/blueprint/blueprint.xml 을 확장하여 두 경로 항목을 모두 노출합니다.
  3. Design 탭에서 Route_route1 항목을 두 번 클릭하여 Route_route1 로 전환합니다.
  4. 캔버스에서 Choice_choice1 노드를 선택한 다음 red icon 아이콘을 클릭하여 조건 없는 Cryostat를 설정합니다.

    BPnodeIcons
    정방향 nav
    BPnodeIcons2
    참고

    경로 편집기에서 노드의 gray icon 아이콘 또는 delete icon 아이콘을 각각 클릭하여 특정 Cryostat를 비활성화하거나 삭제할 수 있습니다. 캔버스를 마우스 오른쪽 버튼으로 클릭하고 모든 Cryostat 삭제를 선택하여 모든 set Cryostat를 삭제할 수 있습니다.

  5. 다음 Route_Route1 노드에서 unconditional Cryostats를 설정합니다.

    • Log_log1
    • SetHeader_setHeader1
    • To_Invalid
    • Log_log2
    • SetHeader_setHeader2
    • To_Fulfill
  6. Project Explorer 에서 src/main/resources/OSGI-INF/blueprint 아래의 Route_route2 를 두 번 클릭하여 캔버스에서 Route_route2 를 엽니다.
  7. 다음 Route_Route2 노드에서 unconditional Cryostats를 설정합니다.

    • Choice_choice2
    • SetHeader_setHead_usa
    • Log_usa
    • To_US
    • SetHeader_setHead_ger
    • Log_ger
    • To_GER

7.4. 라우팅 컨텍스트를 통해 처리

다음 두 가지 방법으로 라우팅 컨텍스트를 단계별로 수행할 수 있습니다.

  • step over ( Step Over icon ) - Cryostat와 관계없이 라우팅 컨텍스트에서 다음 실행 노드로 이동합니다.
  • resume( Resume icon ) - 라우팅 컨텍스트에서 다음 활성 Cryostat로 이동합니다.

    1. Project Explorer 에서 ZooOrderApp 프로젝트의 Camel Contexts 폴더를 확장하여 블루프린트.xml 파일을 노출합니다.
    2. 블루프린트.xml 파일을 마우스 오른쪽 버튼으로 클릭하여 컨텍스트 메뉴를 연 다음 Debug As Local Camel Context ( tests 제외) 를 클릭합니다.

      Camel 디버거는 발생하는 첫 번째 Cryostat에서 실행을 일시 중지하고 이제 디버그 화면을 열지 여부를 요청합니다.

      tutCnfrmPerspSwitch
    3. 예를 클릭합니다.

      참고

      아니요 를 클릭하면 확인 창이 여러 번 표시됩니다. 세 번째 거부 후 사라집니다. Camel 디버거는 실행을 다시 시작합니다. 이 시점에서 디버거와 상호 작용하려면 관점 열기 디버그를 클릭하여 디버그 관점을 열어야 합니다.

      디버그 보기에 표시된 것처럼 _ route1 [blueprint.xml]에서 _choice1 에서 일시 중지된 라우팅 컨텍스트로 디버그 모드가 열립니다.

      tutDebugPerspOpen1
      참고

      Cryostat는 디버거가 자동으로 다시 시작되기까지 최대 5분 동안 유지되며, 다음 Cryostat로 이동하거나, 라우팅 컨텍스트의 끝까지 어느 쪽이오면 됩니다.

    4. 변수 보기에서 노드를 확장하여 각 노드에 사용 가능한 변수와 값을 노출합니다.

      라우팅 컨텍스트를 단계별로 살펴보면 마지막 Cryostat 이후 값이 변경된 변수는 노란색으로 강조 표시됩니다. 각 Cryostat에서 노드를 확장하여 변경된 변수를 공개해야 할 수 있습니다.

    5. Resume icon 을 클릭하여 다음 Cryostat로 이동합니다 . _route1 [blueprint.xml]:

      tutDBResumeLog2Rte1
    6. 변수 보기의 노드를 확장하여 Route1 [blueprintxt.xml]의 _choice1 의 마지막 Cryostat 이후 변경된 변수를 검사합니다.
    7. Resume icon 을 클릭하여 Route1 [blueprint.xml]의 다음 Cryostat, _setHeader2 로 이동합니다.

      Route1 [blueprint.xml]의 _log2에 있는 _log2에서 변경된 변수(하위로 강조 표시)를 검사합니다.

    8. 디버그 보기에서 _route1 [blueprint.xml]에서 _log2 를 클릭하여 빠른 비교를 위해 _ route1 [blueprint.xml]의 Cryostat _log2 의 변수 값으로 변수 뷰를 채웁니다.

      디버그 보기에서 동일한 메시지 흐름 내의 Cryostat를 전환하여 변수 보기에서 변경 변수 값을 빠르게 비교 및 모니터링할 수 있습니다.

      참고

      메시지 흐름은 길이에 따라 다를 수 있습니다. Route_route1InvalidOrders 분기를 전송하는 메시지의 경우 메시지 흐름이 짧습니다. Route_route1ValidOrders 분기를 전송하는 메시지의 경우 Route_route2 로 계속되는 메시지 흐름은 더 길 수 있습니다.

    9. 라우팅 컨텍스트를 계속 진행합니다. 하나의 메시지가 라우팅 컨텍스트를 완료하고 다음 메시지를 입력하면 새 이동 경로 ID가 태그된 디버그 뷰에 새 메시지 흐름이 표시됩니다.

      tutDBviewNextMsg

      이 경우 ID-janemurpheysmbp-home-55846-1471374645179-0-3 은 라우팅 컨텍스트를 입력한 message2.xml 에 해당하는 두 번째 메시지 흐름을 식별합니다. 이동 경로 ID는 2로 증가합니다.

      참고

      교환 및 메시지 ID는 동일하며 라우팅 컨텍스트를 통해 메시지 통과 동안 변경되지 않은 상태로 유지됩니다. 해당 ID는 메시지 흐름의 이동 경로 ID에서 구성되며 1씩 증가합니다. 따라서 message2.xml 의 경우 해당 ExchangeIdMessageIdID-janemurpheysmbp-home-55846-1471374645179-0-4 입니다.

    10. message3.xml 이 _ route_route1 [blueprint.xml]에 Cryostat _choice1 을 입력하면 Processor 변수를 검사합니다. 표시된 값은 message1.xmlmessage2.xml 에 누적된 메트릭으로, 이전에 라우팅 컨텍스트를 전송했습니다.

      tutMsg3Choice1Stats

      타이밍 메트릭은 밀리초 단위입니다.

    11. 라우팅 컨텍스트를 통해 각 메시지를 계속 진행하여 각 처리 단계에서 변수 및 콘솔 출력을 검사합니다. message6.xmlRoute2 [blueprint.xml]에 Cryostat To_GER 를 입력하면 디버거가 이동 경로 스레드를 종료하기 시작합니다.
    12. 메뉴 모음에서 Terminate icon 를 클릭하여 Camel 디버거를 종료합니다. 콘솔은 종료되지만 출력을 수동으로 지워야 합니다.

      참고

      디버그 보기에서 Camel Context 노드에서 선택한 스레드 또는 끝점을 사용하면 먼저 Terminate icon 를 두 번 클릭하여 스레드 또는 끝점을 종료하고 두 번째는 Camel 컨텍스트를 종료하여 세션을 종료해야 합니다.

    13. 메뉴 모음에서 tutDebugPersp 를 마우스 오른쪽 버튼으로 클릭하여 컨텍스트 메뉴를 연 다음 닫기 를 선택하여 디버그 화면을 닫습니다.

      CodeReady Studio는 Camel 디버거를 시작한 관점으로 자동으로 돌아갑니다.

    14. Project Explorer 에서 프로젝트를 마우스 오른쪽 버튼으로 클릭한 다음 새로 고침을 선택하여 디스플레이를 새로 고칩니다.

      참고

      세션을 조기에 종료한 경우 모든 메시지가 라우팅 컨텍스트를 전송하기 전에 다음과 같은 메시지인 message3.xml.camelLock 에서 ZooOrderApp/src/data 폴더에서 볼 수 있습니다. 프로젝트에서 디버거를 다시 실행하기 전에 제거해야 합니다. 이렇게 하려면 .camelLock 메시지를 두 번 클릭하여 컨텍스트 메뉴를 연 다음 삭제 를 선택합니다. 메시지가 표시되면 OK 를 클릭하여 삭제를 확인합니다.

    15. ZooOrderApp/target/messages/ 디렉터리를 확장하여 메시지가 예상 대상으로 전달되었는지 확인합니다.

      tutDualCBRrteVerify

모든 Cryostat가 설정되고 활성화된 라우팅 컨텍스트를 그대로 둡니다.

7.5. 변수 값 변경

이 섹션에서는 감시 목록에 변수를 추가하여 메시지가 라우팅 컨텍스트를 통과할 때 값이 어떻게 변경되는지 쉽게 확인할 수 있습니다. 메시지 본문에서 변수 값을 변경한 다음 변경 사항이 라우팅 컨텍스트를 통해 메시지 경로에 미치는 영향을 관찰합니다.

  1. ZooOrderApp 프로젝트에서 Camel 디버거를 다시 실행하려면 블루프린트.xml 파일을 마우스 오른쪽 버튼으로 클릭한 다음 Debug As Local Camel Context (Test 제외) 를 클릭합니다.
  2. message1 이 첫 번째 Cryostat에서 중지되었으므로 _route1 [blueprint.xml]의 _choice 1 변수를 감시 목록에 NodeIdRouteId ( Exchange 카테고리의) 및 Message BodyCamelFileName 을 추가합니다.

    4개의 변수 각각에 대해 다음을 수행합니다.

    1. 변수 보기에서 적절한 카테고리를 확장하여 대상 변수를 노출합니다.
    2. 변수를 마우스 오른쪽 버튼으로 클릭하여(이 경우 교환 카테고리에서 NodeId ) 컨텍스트 메뉴를 열고 Watch:을 선택합니다.

      FTVarNodeIDWatch

      조사하도록 선택한 변수가 나열되는 표현식 탭이 열립니다.

      FTWatchM1NodeId
      참고

      감시 목록을 생성하면 관심 있는 여러 변수의 현재 값을 빠르게 확인할 수 있습니다.

  3. _ route1 [blueprint.xml]에 있는 _Fulfill에 도달할 때까지 라우팅 컨텍스트를 통한 step message1 .
  4. 변수 보기에서 메시지 범주를 확장합니다.
  5. 조사 목록에 변수 Destination 을 추가합니다.

    이제 Expressions 뷰에 다음 변수가 포함되어야 합니다.

    FTWatchM1R1toFfil
    참고
    • 변수 목록 아래의 창에는 선택한 변수의 값이 표시됩니다.
    • Expressions 뷰에는 명시적으로 제거할 때까지 목록에 추가한 모든 변수가 유지됩니다.
  6. 나머지 라우팅 컨텍스트를 통해 message1 단계를 수행한 다음 message2 를 모두 통과합니다.
  7. _ route1 [blueprint.xml]의 _choice1에서 message3 을 중지합니다.
  8. 변수 보기에서 Message 카테고리를 확장하여 MessageBody 변수를 노출합니다.
  9. MessageBody 를 마우스 오른쪽 버튼으로 클릭하여 컨텍스트 메뉴를 열고 값 변경:을 선택합니다.

    tutVarChngMenuMsg2
  10. 수량 값을 15 에서 10 으로 변경합니다 (잘못된 주문에서 유효한 주문으로 변경하십시오).

    tutChgVarsMsg2

    이렇게 하면 메모리 내 값만 변경됩니다( message3.xml 파일을 편집하지 않음).

  11. OK를 클릭합니다.
  12. 표현식 보기로 전환하고 MessageBody 변수를 선택합니다.

    변수 목록 아래의 창에는 message3 의 전체 본문이 표시되어 현재 주문 항목 값을 쉽게 확인할 수 있습니다.

    FTWatchM2R1toFfilVarChng
  13. Resume icon 을 클릭하여 다음 Cryostat로 이동합니다.

    To_Invalid 로 이어지는 분기를 따르는 대신message3 은 이제To_FulfillRoute_route2 로 이어지는 분기를 따릅니다.

7.6. Camel 디버거의 초점 축소

일시적으로 좁은 다음 디버거를 비활성화 및 다시 활성화하여 디버거의 초점을 다시 노출할 수 있습니다.

  1. 라우팅 컨텍스트를 통해 메시지4 단계, 디버그 보기, 변수 보기 및 콘솔 출력을 각 단계에서 확인합니다.
  2. _ route1 [blueprint.xml]의 _choice1에서 message4 를 중지합니다.
  3. Breakpoints 뷰로 전환하고 아래에 나열된 Cryostat 옆에 있는 각 확인란의 선택을 해제합니다. _choice1. Cryostat의 확인란을 지우면 임시로 비활성화됩니다.

    tutBreakptsDisabled
  4. Resume icon 을 클릭하여 다음 Cryostat로 이동합니다.

    tutMsg3toFulfillRte1

    디버거는 비활성화된 Cryostat를 건너뛰고 _route1 [blueprint.xml] 에서 _FulFill 로 이동합니다.

  5. Resume icon 를 다시 클릭하여 다음 Cryostat로 이동합니다.

    tutMsg3toUKRte2

    디버거는 _route2 [blueprint.xml]의 _GER 로 이동합니다.

  6. Resume icon 를 반복적으로 클릭하여 라우팅 컨텍스트를 통해 message5message6 을 빠르게 단계별로 수행합니다.
  7. Breakpoints 뷰로 전환한 다음 모든 Cryostat 옆에 있는 확인란을 선택하여 다시 활성화합니다.

7.7. 메시지 변수 값 변경의 영향 확인

디버거를 중지하고 'message1's quantity 변수의 값을 변경하는 결과를 확인하려면 다음을 수행하십시오.

  1. 툴 모음에서 Terminate icon 을 클릭하여 Camel 디버거를 종료합니다.

    tutDBTerminateNorm
  2. 콘솔의 Clear output icon 버튼을 클릭하여 출력을 지웁니다.
  3. 디버그 화면을 닫고 Camel 디버거를 시작한 관점으로 돌아갑니다.
  4. Project Explorer 에서 디스플레이를 새로 고칩니다.
  5. ZooOrderApp/target/messages/ 디렉토리를 확장하여 메시지가 예상대로 전달되었는지 확인합니다.

    tutPETargetDestsChngedVars

    message1invalidOrders 로 전송되었으며 message3.xml유효한Orders/Germany 폴더에 표시됩니다.

7.8. 다음 단계

8장. 경로를 통해 메시지 추적 튜토리얼에서는 라우팅 컨텍스트를 통해 메시지를 추적하여 라우팅 컨텍스트를 최적화하고 라우팅 컨텍스트의 성능을 미세 조정할 수 있는 위치를 결정합니다.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.