예제
본 장에서는 AnyLink MQ 어댑터를 사용하여 인바운드로 전문을 받아 아웃바운드로 거래를 수행해서 응답을 받는 사용 예제를 설명한다.
1. 개요
예제에 사용된 거래 패턴은 다음과 같다.
왼쪽의 AnyLink는 MQ 아웃바운드 거래이며, 스튜디오의 디버거 모드를 통해 플로우를 실행 및 아웃바운드 룰 호출을 실행한다. 오른쪽의 AnyLink는 MQ 인바운드 거래이며, 들어온 요청에 대한 응답을 내보낸다.
2. 어댑터 생성
AnyLink WebAdmin에 로그인한 후 초기화면에서 [구성관리] > [어댑터]를 선택한 후 어댑터 목록화면의 [Add] 버튼을 클릭하면 어댑터 등록 화면이 나타난다. 어댑터 생성에 대한 자세한 내용은 어댑터 설정을 참고한다.
AnyLink WebAdmin의 접속 및 사용법에 관한 자세한 내용은 AnyLink WebAdmin 안내서를 참고한다. |
MQ 어댑터를 생성한다.
3. 엔드포인트 생성
어댑터 생성이 완료되면 [어댑터] 탭에서 등록된 어댑터를 조회하고, 조회된 어댑터를 클릭하면 어댑터 상세정보 화면으로 이동한다.
[엔드포인트 목록] 탭 아래 [Add] 버튼을 클릭하면 엔드포인트 등록 화면이 나타난다. 엔드포인트 생성에 대한 자세한 설명은 엔드포인트 설정을 참고한다.
3.1. 인바운드 엔드포인트 생성
왼쪽 어댑터 트리에서 편집할 엔드포인트를 클릭하면 엔드포인트 상세정보 화면으로 이동한다. 본 예제에서 사용된 엔드포인트는 request-response 방식으로 구동된다.
-
[연결정보] 탭
다음과 같이 요청 메시지를 폴링할 MQ 서버의 연결 정보를 입력한다.
엔드포인트 등록 화면 - [연결 정보]항목 설정값 주소
192.168.5.109
포트
2424
큐 매니저 이름
IFL_Q
채널
SVRCONN
계정
tmax
비밀번호
tmax
-
[큐 설정] 탭
다음과 같이 요청 메시지를 풀링할 큐 정보를 입력한다.
엔드포인트 등록 화면 - [큐 설정]항목 설정값 큐 이름
LOCAL.QUEUE_TEST
Get 타임아웃
1000
응답 큐 이름
LOCAL.QUEUE_TEST2
MQ 전송 모드
requestResponse
메시지 만료
입력 없음
영구 메시지
기본
메시지 우선순위
입력 없음
폴링 간격
1000
-
[상세설정] 탭
다음과 같이 상기 작성한 거래 정보를 입력한다. 거래그룹을 통해 txCode 필드를 이용하여 인바운드 거래를 실행할 것이기 때문에 거래그룹을 지정한다.
엔드포인트 등록 화면 - [상세설정]항목 설정값 메시지 핸들러
입력 없음
거래그룹/거래
com.tmax.mq
3.2. 아웃바운드 엔드포인트 생성
왼쪽 어댑터 트리에서 편집할 엔드포인트를 클릭하면 엔드포인트 상세정보 화면으로 이동한다. 본 예제에서 사용된 엔드포인트는 request-response 방식으로 구동된다.
-
[연결정보] 탭
다음과 같이 요청 메시지를 보낼 MQ 서버의 연결 정보를 입력한다.
엔드포인트 설정 화면 - [연결정보]항목 설정값 주소
192.168.5.109
포트
2424
큐 매니저 이름
IFL_Q
채널
SVRCONN
계정
tmax
비밀번호
tmax
-
[큐 설정] 탭
다음과 같이 요청 메시지를 보낼 큐 정보를 입력한다.
엔드포인트 설정 화면 - [큐 설정]항목 설정값 큐 이름
LOCAL.QUEUE_TEST
Get 타임아웃(ms)
1000
응답 큐 이름
LOCAL.QUEUE_TEST2
MQ 전송 모드
requestResponse
메시지 만료 (100 ms)
입력 없음
영구 메시지
기본
메시지 우선순위
입력 없음
4. 스튜디오 리소스 생성
본 절에서는 스튜디오에서 리소스를 생성하는 방법에 대해서 설명한다.
AnyLink 스튜디오 사용법에 대한 자세한 내용은 AnyLink 스튜디오 안내서를 참고한다. |
예제는 하나의 거래 그룹을 부모 노드로 가지는 인바운드, 아웃바운드 거래로 구성된다.
거래 노드는 다음의 과정을 통해 생성된다.
-
거래그룹 생성
거래 그룹의 생성 설정은 다음과 같다.
항목 설정값 패키지
com.tmax
거래 이름
MQ예제
거래 ID
mq
-
거래 생성
거래 그룹으로 선언된 "MQ 예제" 노드에 거래로 선언된 "MQ아웃바운드거래" 및 "MQ인바운드거래" 노드를 추가한다.
-
MQ 아웃바운드 거래 생성
항목 설정값 노드 타입
거래
거래 이름
MQ아웃바운드거래
거래 ID
outbound
-
인바운드 거래 생성
항목 설정값 노드 타입
거래
거래 이름
MQ인바운드거래
거래 ID
inbound
-
-
메시지
예제에서는 아웃바운드 및 인바운드에서 공통으로 사용한 공통 헤더 메시지와 각 거래에서 사용할 바디 메시지를 생성해야 한다.
메시지 생성 -
아웃바운드 룰 생성
아웃바운드 거래에서는 아웃바운드 룰을 호출하여 MQ 아웃바운드를 실행한다.
거래 노드의 컨텍스트 메뉴에서 [새로만들기] > [ 아웃바운드 룰] > [MQ 아웃바운드 룰]을 선택하면 MQ 아웃바운드 룰 생성 화면이 나타난다.
아웃바운드 룰 생성 -
플로우 생성
MQ 인바운드 및 아웃바운드 거래는 모두 호출 서비스로 플로우를 지정한다. 인바운드 거래에서는 들어온 바디 전문에 replyMq를 채울 것이고, 아웃바운드 플로우는 단순히 룰을 호출하고 종료된다.
플로우 룰 생성
5. 스튜디오 리소스 설정
본 절에서는 생성한 리소스를 설정하는 방법에 대해서 설명한다.
AnyLink 스튜디오 사용법에 대한 자세한 내용은 AnyLink 스튜디오 안내서를 참고한다. |
5.1. 인바운드 거래 설정
다음은 AnyLink 스튜디오를 사용한 거래를 작성하는 과정에 대한 설정값이다. 본 예제에서 사용된 거래는 request-response 방식으로 구동되며, Fixed-length 타입의 전문을 요청 메시지로 사용한다.
인바운드 거래의 작성 방법에 대해서는 일반적인 거래 설정 패턴을 벗어나지 않기 때문에 자세한 설정값은 생략한다. |
-
예제에서 사용된 거래의 구조는 다음과 같다.
거래 트리거래그룹에 헤더 메시지가 정의되어 있고, 거래에 바디 메시지를 정의하며, 각각 길이가 4, 7인 fixed-length 타입의 메시지를 가진다. 헤더의 txCode 필드를 하위거래 식별 필드로 지정하고 MQ 인바운드 거래의 거래 식별코드를 tx01, 종류를 REQUEST로 설정한다.
전문 구조는 다음과 같다.
메시지 ID 필드명 필드 타입 필드 길이 Header
txCode
string
4
Body
body
string
7
파싱 정보 화면은 다음과 같다.
인바운드 거래 파싱 정보 설정 -
다음과 같이 거래의 요청 전문을 바로 응답으로 보내는 플로우를 작성한다.
플로우 -
응답 메시지라는 것을 확인하기 위하여 바디 메시지의 바디 필드에 Expression을 사용하여 "replyMQ"라는 값을 입력하여 응답 전문으로 사용한다.
응답 매핑
5.2. 아웃바운드 거래 설정
본 예제에서 사용된 거래는 request-response 방식으로 구동되며, Fixed-length 타입의 전문을 요청 메시지로 사용한다.
-
예제에서 사용된 거래의 구조는 다음과 같다.
거래 트리거래그룹에 헤더 메시지가 정의되어 있고, 거래에 바디 메시지를 정의하며, 각각 길이가 4, 7인 fixed-length 타입의 메시지를 가진다.
전문 구조는 다음과 같다.
메시지 ID 필드명 필드 타입 필드 길이 Header
txCode
string
4
Body
body
string
7
-
다음과 같이 예제에서 호출될 플로우를 작성한다. 헤더와 바디 두 메시지를 요청 메시지로 입력 받는다.
플로우 -
상기 플로우의 MQ 액티비티에서 호출할 아웃바운드 룰은 다음과 같다.
헤더와 바디 두 메시지를 요청 메시지로 보내고, 동일한 메시지를 응답으로 받는다. 응답 큐에 대한 정보는 아웃바운드 엔드포인트의 것을 사용할 것이기 때문에 별도 기재하지 않는다. 만약 아웃바운드 룰에 별도로 설정할 경우 엔드포인트의 것 보다 우선하여 적용되며, 엔드포인트의 큐 관리자와 동일한 큐 관리자에서 큐를 지정해야 한다.
아웃바운드 룰아웃바운드 룰 설정 정보는 다음과 같다.
항목 설정값 아웃바운드룰 ID
MqOutboundRule
아웃바운드룰 이름
MQ아웃바운드룰
요청처리 타임아웃(ms)
10000
Endpoint(Group)
MQ_OUT_EP01
요청 메시지
Header, Body (둘 다 FixedLength)
정상 응답 메시지
Header, Body (둘 다 FixedLength)
-
예제를 구동하기 위해 요청 매핑에 Expression을 사용하여 각 필드에 테스트에 사용할 값을 입력한다.
요청 매핑 -
응답 값이 정상적으로 들어오는지를 확인하기 위하여 출력 매핑에서 입력 변수의 값을 확인할 수 있는 UserMapping 핸들러를 호출한다. 매핑 핸들러 생성 다이얼로그는 다음과 같다.
매핑 핸들러 생성항목 설정값 Name
CheckResponse
package com.tmax.mq.outbound; import com.tmax.anylink.api.serviceflow.ActivityContext; import com.tmax.anylink.api.serviceflow.DefaultUserMapping; import com.tmax.anylink.common.AnyLinkException; import com.tmax.anylink.logging.Logger; public class CheckResponse extends DefaultUserMapping { private static final Logger logger = Logger.getLogger(CheckResponse.class.getName()); @Override public Object[] mapping(ActivityContext arg0, Object[] arg1) throws AnyLinkException { logger.info("####################################"); for(Object obj : arg1) { logger.info(obj.toString()); } logger.info("####################################"); return arg1; } }
액티비티에 매핑 핸들러를 설정하기 위해서 바탕의 컨텍스트 메뉴에서 [Property]를 선택한다.
액티비티 속성 팝업왼쪽 메뉴의 [아웃바운드 룰(서비스) 설정] 메뉴를 클릭하고, '응답 매핑 사용'을 체크한 뒤 [Mapping] 버튼을 클릭한다.
아웃바운드 룰 응답 매핑 사용Mapping 화면 아래의 [Add User Class] 버튼을 클릭해서 작성한 유저 클래스의 풀 네임을 지정한다.
요청 매핑매핑 유저 클래스 설정
7. 구동 테스트
아웃바운드를 직접 실행하기 위해 스튜디오의 디버거 기능을 활용하여 해당 플로우를 직접 호출한다.
Expression을 사용하여 직접 요청 값을 할당했기 때문에 요청 메시지의 필드 값을 입력할 필요는 없다. 브레이크 포인트를 걸지 않고 끝까지 실행했을 때 RTE 서버 로그를 통해서 다음과 같은 메시지가 출력된다. 결과에서 txCode가 tx01이고, body가 replyMQ인 메시지를 응답 메시지로 받았다는 것을 확인할 수 있다.
[#|2016-03-09 18:50:01.159|INFO|202|com.tmax.mq.outbound.CheckResponse|| 7F0001015AC836B3109AF53300000029|||||####################################|#] [#|2016-03-09 18:50:01.160|INFO|202|com.tmax.mq.outbound.CheckResponse|| 7F0001015AC836B3109AF53300000029|||||com.tmax.mq.Header@1f65858b txCode : tx01 |#] [#|2016-03-09 18:50:01.160|INFO|202|com.tmax.mq.outbound.CheckResponse|| 7F0001015AC836B3109AF53300000029|||||com.tmax.mq.outbound.Body@422278c7 body : replyMQ |#] [#|2016-03-09 18:50:01.160|INFO|202|com.tmax.mq.outbound.CheckResponse|| 7F0001015AC836B3109AF53300000029|||||####################################|#]