7장. 라우팅 컨텍스트 디버깅
이 튜토리얼에서는 Camel 디버거를 사용하여 로컬에서 실행 중인 라우팅 컨텍스트에 대한 논리 오류를 찾는 방법을 보여줍니다.
7.1. 목표
이 튜토리얼에서는 다음 작업을 완료합니다.
- 두 경로에 관심 있는 노드에 있는 Cryostat를 설정합니다.
- 디버그 관점에서 경로를 살펴보고 메시지 변수 값을 검사합니다.
- 경로를 다시 진행하여 메시지 변수의 값을 변경하고 효과를 관찰합니다.
7.2. 사전 요구 사항
이 튜토리얼을 시작하려면 다음 중 하나에서 생성된 ZooOrderApp 프로젝트가 필요합니다.
6장. 라우팅 컨텍스트에 다른 경로 추가 튜토리얼을 완료합니다.
또는
-
2장. 환경 설정 튜토리얼을 완료하고 “리소스 파일 정보” 에 설명된 대로 프로젝트의
블루프린트Contexts/blueprint3.xml
파일을 제공된블루프린트Contexts/blueprint3.xml
파일로 교체합니다.
7.3. Cryostat 설정
Debugger에서는 조건적 및 무조건적 Cryostat를 둘 다 설정할 수 있습니다. 이 튜토리얼에서는 unconditional Cryostat만 설정합니다. 디버깅 세션 중에 특정 조건이 충족될 때 트리거되는 조건부 Cryostat를 설정하는 방법을 알아보려면 도구 사용자 가이드를 참조하십시오.
unconditional Cryostats를 설정하려면 다음을 수행합니다.
-
필요한 경우 경로 편집기에서
ZooOrderApp/src/main/resources/OSGI-INF/blueprint/blueprint.xml
을 엽니다. -
Project Explorer 에서
Camel Contexts
src/main/resources/OSGI-INF/blueprint/blueprint.xml
을 확장하여 두 경로 항목을 모두 노출합니다. -
Design 탭에서 Route_route1 항목을 두 번 클릭하여
Route_route1
로 전환합니다. 캔버스에서
Choice_choice1
노드를 선택한 다음 아이콘을 클릭하여 조건 없는 Cryostat를 설정합니다.참고경로 편집기에서 노드의 아이콘 또는 아이콘을 각각 클릭하여 특정 Cryostat를 비활성화하거나 삭제할 수 있습니다. 캔버스를 마우스 오른쪽 버튼으로 클릭하고 모든 Cryostat 삭제를 선택하여 모든 set Cryostat를 삭제할 수 있습니다.
다음
Route_Route1
노드에서 unconditional Cryostats를 설정합니다.-
Log_log1
-
SetHeader_setHeader1
-
To_Invalid
-
Log_log2
-
SetHeader_setHeader2
-
To_Fulfill
-
-
Project Explorer 에서
src/main/resources/OSGI-INF/blueprint
아래의Route_route2
를 두 번 클릭하여 캔버스에서Route_route2
를 엽니다. 다음
Route_Route2
노드에서 unconditional Cryostats를 설정합니다.-
Choice_choice2
-
SetHeader_setHead_usa
-
Log_usa
-
To_US
-
SetHeader_setHead_ger
-
Log_ger
-
To_GER
-
7.4. 라우팅 컨텍스트를 통해 처리
다음 두 가지 방법으로 라우팅 컨텍스트를 단계별로 수행할 수 있습니다.
- step over ( ) - Cryostat와 관계없이 라우팅 컨텍스트에서 다음 실행 노드로 이동합니다.
resume( ) - 라우팅 컨텍스트에서 다음 활성 Cryostat로 이동합니다.
-
Project Explorer 에서
ZooOrderApp
프로젝트의Camel Contexts
폴더를 확장하여블루프린트.xml
파일을 노출합니다. 블루프린트.xml
파일을 마우스 오른쪽 버튼으로 클릭하여 컨텍스트 메뉴를 연 다음 Debug AsLocal Camel Context ( tests 제외) 를 클릭합니다. Camel 디버거는 발생하는 첫 번째 Cryostat에서 실행을 일시 중지하고 이제 디버그 화면을 열지 여부를 요청합니다.
예를 클릭합니다.
참고아니요 를 클릭하면 확인 창이 여러 번 표시됩니다. 세 번째 거부 후 사라집니다. Camel 디버거는 실행을 다시 시작합니다. 이 시점에서 디버거와 상호 작용하려면 창
관점 열기 디버그를 클릭하여 디버그 관점을 열어야 합니다. 디버그 보기에 표시된 것처럼 _
route1 [blueprint.xml]에서 _choice1
에서 일시 중지된 라우팅 컨텍스트로 디버그 모드가 열립니다.참고Cryostat는 디버거가 자동으로 다시 시작되기까지 최대 5분 동안 유지되며, 다음 Cryostat로 이동하거나, 라우팅 컨텍스트의 끝까지 어느 쪽이오면 됩니다.
변수 보기에서 노드를 확장하여 각 노드에 사용 가능한 변수와 값을 노출합니다.
라우팅 컨텍스트를 단계별로 살펴보면 마지막 Cryostat 이후 값이 변경된 변수는 노란색으로 강조 표시됩니다. 각 Cryostat에서 노드를 확장하여 변경된 변수를 공개해야 할 수 있습니다.
을 클릭하여 다음 Cryostat로 이동합니다
. _route1 [blueprint.xml]
:-
변수 보기의 노드를 확장하여
Route1 [blueprintxt.xml]의 _choice1
의 마지막 Cryostat 이후 변경된 변수를 검사합니다. 을 클릭하여
Route1 [blueprint.xml]의 다음 Cryostat, _setHeader2
로 이동합니다.Route1 [blueprint.xml]의 _log2에 있는 _log2에서
변경된 변수(하위로 강조 표시)를 검사합니다.디버그 보기에서
_route1 [blueprint.xml]에서 _log2
를 클릭하여 빠른 비교를 위해 _route1 [blueprint.xml]의 Cryostat _log2
의 변수 값으로 변수 뷰를 채웁니다.디버그 보기에서 동일한 메시지 흐름 내의 Cryostat를 전환하여 변수 보기에서 변경 변수 값을 빠르게 비교 및 모니터링할 수 있습니다.
참고메시지 흐름은 길이에 따라 다를 수 있습니다.
Route_route1
의InvalidOrders
분기를 전송하는 메시지의 경우 메시지 흐름이 짧습니다.Route_route1
의ValidOrders
분기를 전송하는 메시지의 경우Route_route2
로 계속되는 메시지 흐름은 더 길 수 있습니다.라우팅 컨텍스트를 계속 진행합니다. 하나의 메시지가 라우팅 컨텍스트를 완료하고 다음 메시지를 입력하면 새 이동 경로 ID가 태그된 디버그 뷰에 새 메시지 흐름이 표시됩니다.
이 경우
ID-janemurpheysmbp-home-55846-1471374645179-0-3
은 라우팅 컨텍스트를 입력한message2.xml
에 해당하는 두 번째 메시지 흐름을 식별합니다. 이동 경로 ID는 2로 증가합니다.참고교환 및 메시지 ID는 동일하며 라우팅 컨텍스트를 통해 메시지 통과 동안 변경되지 않은 상태로 유지됩니다. 해당 ID는 메시지 흐름의 이동 경로 ID에서 구성되며 1씩 증가합니다. 따라서
message2.xml
의 경우 해당ExchangeId
및MessageId
는ID-janemurpheysmbp-home-55846-1471374645179-0-4
입니다.message3.xml
이 _route_route1 [blueprint.xml]에 Cryostat _choice1
을 입력하면 Processor 변수를 검사합니다. 표시된 값은message1.xml
및message2.xml
에 누적된 메트릭으로, 이전에 라우팅 컨텍스트를 전송했습니다.타이밍 메트릭은 밀리초 단위입니다.
-
라우팅 컨텍스트를 통해 각 메시지를 계속 진행하여 각 처리 단계에서 변수 및 콘솔 출력을 검사합니다.
message6.xml
이Route2 [blueprint.xml]에 Cryostat To_GER
를 입력하면 디버거가 이동 경로 스레드를 종료하기 시작합니다. 메뉴 모음에서 를 클릭하여 Camel 디버거를 종료합니다. 콘솔은 종료되지만 출력을 수동으로 지워야 합니다.
참고디버그 보기에서 Camel Context 노드에서 선택한 스레드 또는 끝점을 사용하면 먼저 를 두 번 클릭하여 스레드 또는 끝점을 종료하고 두 번째는 Camel 컨텍스트를 종료하여 세션을 종료해야 합니다.
메뉴 모음에서 를 마우스 오른쪽 버튼으로 클릭하여 컨텍스트 메뉴를 연 다음 닫기 를 선택하여 디버그 화면을 닫습니다.
CodeReady Studio는 Camel 디버거를 시작한 관점으로 자동으로 돌아갑니다.
Project Explorer 에서 프로젝트를 마우스 오른쪽 버튼으로 클릭한 다음 새로 고침을 선택하여 디스플레이를 새로 고칩니다.
참고세션을 조기에 종료한 경우 모든 메시지가 라우팅 컨텍스트를 전송하기 전에 다음과 같은 메시지인
message3.xml.camelLock
에서ZooOrderApp/src/data
폴더에서 볼 수 있습니다. 프로젝트에서 디버거를 다시 실행하기 전에 제거해야 합니다. 이렇게 하려면.camelLock
메시지를 두 번 클릭하여 컨텍스트 메뉴를 연 다음 삭제 를 선택합니다. 메시지가 표시되면 OK 를 클릭하여 삭제를 확인합니다.ZooOrderApp/target/messages/
디렉터리를 확장하여 메시지가 예상 대상으로 전달되었는지 확인합니다.
-
Project Explorer 에서
모든 Cryostat가 설정되고 활성화된 라우팅 컨텍스트를 그대로 둡니다.
7.5. 변수 값 변경
이 섹션에서는 감시 목록에 변수를 추가하여 메시지가 라우팅 컨텍스트를 통과할 때 값이 어떻게 변경되는지 쉽게 확인할 수 있습니다. 메시지 본문에서 변수 값을 변경한 다음 변경 사항이 라우팅 컨텍스트를 통해 메시지 경로에 미치는 영향을 관찰합니다.
-
ZooOrderApp
프로젝트에서 Camel 디버거를 다시 실행하려면블루프린트.xml
파일을 마우스 오른쪽 버튼으로 클릭한 다음 Debug AsLocal Camel Context (Test 제외) 를 클릭합니다. message1
이 첫 번째 Cryostat에서 중지되었으므로_route1 [blueprint.xml]의 _choice
1 변수를 감시 목록에NodeId
및RouteId
(Exchange
카테고리의) 및Message
BodyCamelFileName
을 추가합니다.4개의 변수 각각에 대해 다음을 수행합니다.
- 변수 보기에서 적절한 카테고리를 확장하여 대상 변수를 노출합니다.
변수를 마우스 오른쪽 버튼으로 클릭하여(이 경우
교환
카테고리에서NodeId
) 컨텍스트 메뉴를 열고 Watch:을 선택합니다.조사하도록 선택한 변수가 나열되는 표현식 탭이 열립니다.
참고감시 목록을 생성하면 관심 있는 여러 변수의 현재 값을 빠르게 확인할 수 있습니다.
-
_
route1 [blueprint.xml]에 있는 _Fulfill에 도달할 때까지 라우팅 컨텍스트를 통한 step
.message1
-
변수 보기에서
메시지
범주를 확장합니다. 조사 목록에 변수
Destination
을 추가합니다.이제 Expressions 뷰에 다음 변수가 포함되어야 합니다.
참고- 변수 목록 아래의 창에는 선택한 변수의 값이 표시됩니다.
- Expressions 뷰에는 명시적으로 제거할 때까지 목록에 추가한 모든 변수가 유지됩니다.
-
나머지 라우팅 컨텍스트를 통해
message1
단계를 수행한 다음message2
를 모두 통과합니다. -
_
route1 [blueprint.xml]의 _choice1에서
message3
을 중지합니다. -
변수 보기에서
Message
카테고리를 확장하여MessageBody
변수를 노출합니다. MessageBody
를 마우스 오른쪽 버튼으로 클릭하여 컨텍스트 메뉴를 열고 값 변경:을 선택합니다.수량
값을 15 에서 10 으로 변경합니다 (잘못된 주문에서 유효한 주문으로 변경하십시오).이렇게 하면 메모리 내 값만 변경됩니다(
message3.xml
파일을 편집하지 않음).- OK를 클릭합니다.
표현식 보기로 전환하고
MessageBody
변수를 선택합니다.변수 목록 아래의 창에는
message3
의 전체 본문이 표시되어 현재 주문 항목 값을 쉽게 확인할 수 있습니다.을 클릭하여 다음 Cryostat로 이동합니다.
To_Invalid
로 이어지는 분기를 따르는 대신message3
은 이제To_Fulfill
및Route_route2
로 이어지는 분기를 따릅니다.
7.6. Camel 디버거의 초점 축소
일시적으로 좁은 다음 디버거를 비활성화 및 다시 활성화하여 디버거의 초점을 다시 노출할 수 있습니다.
-
라우팅 컨텍스트를 통해
메시지4
단계, 디버그 보기, 변수 보기 및 콘솔 출력을 각 단계에서 확인합니다. -
_
route1 [blueprint.xml]의 _choice1에서
message4
를 중지합니다. Breakpoints 뷰로 전환하고 아래에 나열된 Cryostat 옆에 있는 각 확인란의 선택을 해제합니다.
_choice1
. Cryostat의 확인란을 지우면 임시로 비활성화됩니다.을 클릭하여 다음 Cryostat로 이동합니다.
디버거는 비활성화된 Cryostat를 건너뛰고
_route1 [blueprint.xml] 에서 _FulFill
로 이동합니다.를 다시 클릭하여 다음 Cryostat로 이동합니다.
디버거는
_route2 [blueprint.xml]의 _GER
로 이동합니다.-
를 반복적으로 클릭하여 라우팅 컨텍스트를 통해
message5
및message6
을 빠르게 단계별로 수행합니다. - Breakpoints 뷰로 전환한 다음 모든 Cryostat 옆에 있는 확인란을 선택하여 다시 활성화합니다.
7.7. 메시지 변수 값 변경의 영향 확인
디버거를 중지하고 'message1's quantity 변수의 값을 변경하는 결과를 확인하려면 다음을 수행하십시오.
툴 모음에서 을 클릭하여 Camel 디버거를 종료합니다.
- 콘솔의 버튼을 클릭하여 출력을 지웁니다.
- 디버그 화면을 닫고 Camel 디버거를 시작한 관점으로 돌아갑니다.
- Project Explorer 에서 디스플레이를 새로 고칩니다.
ZooOrderApp/target/messages/
디렉토리를 확장하여 메시지가 예상대로 전달되었는지 확인합니다.message1
만invalidOrders
로 전송되었으며message3.xml
이유효한Orders/Germany
폴더에 표시됩니다.
7.8. 다음 단계
8장. 경로를 통해 메시지 추적 튜토리얼에서는 라우팅 컨텍스트를 통해 메시지를 추적하여 라우팅 컨텍스트를 최적화하고 라우팅 컨텍스트의 성능을 미세 조정할 수 있는 위치를 결정합니다.