예제

본 장에서는 AnyLink MQ 어댑터를 사용하여 인바운드로 전문을 받아 아웃바운드로 거래를 수행해서 응답을 받는 사용 예제를 설명한다.

1. 개요

예제에 사용된 거래 패턴은 다음과 같다.

figure example pattern
거래 패턴

왼쪽의 AnyLink는 MQ 아웃바운드 거래이며, 스튜디오의 디버거 모드를 통해 플로우를 실행 및 아웃바운드 룰 호출을 실행한다. 오른쪽의 AnyLink는 MQ 인바운드 거래이며, 들어온 요청에 대한 응답을 내보낸다.

2. 어댑터 생성

AnyLink WebAdmin에 로그인한 후 초기화면에서 [구성관리] > [어댑터]를 선택한 후 어댑터 목록화면[Add] 버튼을 클릭하면 어댑터 등록 화면이 나타난다. 어댑터 생성에 대한 자세한 내용은 어댑터 설정을 참고한다.

AnyLink WebAdmin의 접속 및 사용법에 관한 자세한 내용은 AnyLink WebAdmin 안내서를 참고한다.

MQ 어댑터를 생성한다.

figure create adapter
MQ 어댑터 생성 화면

3. 엔드포인트 생성

어댑터 생성이 완료되면 [어댑터] 탭에서 등록된 어댑터를 조회하고, 조회된 어댑터를 클릭하면 어댑터 상세정보 화면으로 이동한다.

[엔드포인트 목록] 탭 아래 [Add] 버튼을 클릭하면 엔드포인트 등록 화면이 나타난다. 엔드포인트 생성에 대한 자세한 설명은 엔드포인트 설정을 참고한다.

3.1. 인바운드 엔드포인트 생성

왼쪽 어댑터 트리에서 편집할 엔드포인트를 클릭하면 엔드포인트 상세정보 화면으로 이동한다. 본 예제에서 사용된 엔드포인트는 request-response 방식으로 구동된다.

figure create mq endpoint initial
엔드포인트 등록 화면
  • [연결정보] 탭

    다음과 같이 요청 메시지를 폴링할 MQ 서버의 연결 정보를 입력한다.

    figure mq inbound ep conn
    엔드포인트 등록 화면 - [연결 정보]
    항목 설정값

    주소

    192.168.5.109

    포트

    2424

    큐 매니저 이름

    IFL_Q

    채널

    SVRCONN

    계정

    tmax

    비밀번호

    tmax

  • [큐 설정] 탭

    다음과 같이 요청 메시지를 풀링할 큐 정보를 입력한다.

    figure mq inbound ep queue
    엔드포인트 등록 화면 - [큐 설정]
    항목 설정값

    큐 이름

    LOCAL.QUEUE_TEST

    Get 타임아웃

    1000

    응답 큐 이름

    LOCAL.QUEUE_TEST2

    MQ 전송 모드

    requestResponse

    메시지 만료

    입력 없음

    영구 메시지

    기본

    메시지 우선순위

    입력 없음

    폴링 간격

    1000

  • [상세설정] 탭

    다음과 같이 상기 작성한 거래 정보를 입력한다. 거래그룹을 통해 txCode 필드를 이용하여 인바운드 거래를 실행할 것이기 때문에 거래그룹을 지정한다.

    figure mq inbound ep biztx
    엔드포인트 등록 화면 - [상세설정]
    항목 설정값

    메시지 핸들러

    입력 없음

    거래그룹/거래

    com.tmax.mq

3.2. 아웃바운드 엔드포인트 생성

왼쪽 어댑터 트리에서 편집할 엔드포인트를 클릭하면 엔드포인트 상세정보 화면으로 이동한다. 본 예제에서 사용된 엔드포인트는 request-response 방식으로 구동된다.

figure create endpoint out initial
엔드포인트 설정 화면
  • [연결정보] 탭

    다음과 같이 요청 메시지를 보낼 MQ 서버의 연결 정보를 입력한다.

    figure mq outbound ep conn
    엔드포인트 설정 화면 - [연결정보]
    항목 설정값

    주소

    192.168.5.109

    포트

    2424

    큐 매니저 이름

    IFL_Q

    채널

    SVRCONN

    계정

    tmax

    비밀번호

    tmax

  • [큐 설정] 탭

    다음과 같이 요청 메시지를 보낼 큐 정보를 입력한다.

    figure mq outbound ep queue
    엔드포인트 설정 화면 - [큐 설정]
    항목 설정값

    큐 이름

    LOCAL.QUEUE_TEST

    Get 타임아웃(ms)

    1000

    응답 큐 이름

    LOCAL.QUEUE_TEST2

    MQ 전송 모드

    requestResponse

    메시지 만료 (100 ms)

    입력 없음

    영구 메시지

    기본

    메시지 우선순위

    입력 없음

4. 스튜디오 리소스 생성

본 절에서는 스튜디오에서 리소스를 생성하는 방법에 대해서 설명한다.

AnyLink 스튜디오 사용법에 대한 자세한 내용은 AnyLink 스튜디오 안내서를 참고한다.

예제는 하나의 거래 그룹을 부모 노드로 가지는 인바운드, 아웃바운드 거래로 구성된다.

거래 노드는 다음의 과정을 통해 생성된다.

figure create biztx
거래 생성 다이얼로그
  • 거래그룹 생성

    거래 그룹의 생성 설정은 다음과 같다.

    항목 설정값

    패키지

    com.tmax

    거래 이름

    MQ예제

    거래 ID

    mq

  • 거래 생성

    거래 그룹으로 선언된 "MQ 예제" 노드에 거래로 선언된 "MQ아웃바운드거래" 및 "MQ인바운드거래" 노드를 추가한다.

    • MQ 아웃바운드 거래 생성

      항목 설정값

      노드 타입

      거래

      거래 이름

      MQ아웃바운드거래

      거래 ID

      outbound

    • 인바운드 거래 생성

      항목 설정값

      노드 타입

      거래

      거래 이름

      MQ인바운드거래

      거래 ID

      inbound

  • 메시지

    예제에서는 아웃바운드 및 인바운드에서 공통으로 사용한 공통 헤더 메시지와 각 거래에서 사용할 바디 메시지를 생성해야 한다.

    figure create message
    메시지 생성
  • 아웃바운드 룰 생성

    아웃바운드 거래에서는 아웃바운드 룰을 호출하여 MQ 아웃바운드를 실행한다.

    거래 노드의 컨텍스트 메뉴에서 [새로만들기] > [ 아웃바운드 룰] > [MQ 아웃바운드 룰]을 선택하면 MQ 아웃바운드 룰 생성 화면이 나타난다.

    figure create orule
    아웃바운드 룰 생성
  • 플로우 생성

    MQ 인바운드 및 아웃바운드 거래는 모두 호출 서비스로 플로우를 지정한다. 인바운드 거래에서는 들어온 바디 전문에 replyMq를 채울 것이고, 아웃바운드 플로우는 단순히 룰을 호출하고 종료된다.

    figure create flow
    플로우 룰 생성

5. 스튜디오 리소스 설정

본 절에서는 생성한 리소스를 설정하는 방법에 대해서 설명한다.

AnyLink 스튜디오 사용법에 대한 자세한 내용은 AnyLink 스튜디오 안내서를 참고한다.

5.1. 인바운드 거래 설정

다음은 AnyLink 스튜디오를 사용한 거래를 작성하는 과정에 대한 설정값이다. 본 예제에서 사용된 거래는 request-response 방식으로 구동되며, Fixed-length 타입의 전문을 요청 메시지로 사용한다.

인바운드 거래의 작성 방법에 대해서는 일반적인 거래 설정 패턴을 벗어나지 않기 때문에 자세한 설정값은 생략한다.

  1. 예제에서 사용된 거래의 구조는 다음과 같다.

    figure mq inbound biztx tree
    거래 트리

    거래그룹에 헤더 메시지가 정의되어 있고, 거래에 바디 메시지를 정의하며, 각각 길이가 4, 7인 fixed-length 타입의 메시지를 가진다. 헤더의 txCode 필드를 하위거래 식별 필드로 지정하고 MQ 인바운드 거래의 거래 식별코드를 tx01, 종류를 REQUEST로 설정한다.

    전문 구조는 다음과 같다.

    메시지 ID 필드명 필드 타입 필드 길이

    Header

    txCode

    string

    4

    Body

    body

    string

    7

    파싱 정보 화면은 다음과 같다.

    figure parsing inbound
    인바운드 거래 파싱 정보 설정
  2. 다음과 같이 거래의 요청 전문을 바로 응답으로 보내는 플로우를 작성한다.

    figure mq inbound flow
    플로우
  3. 응답 메시지라는 것을 확인하기 위하여 바디 메시지의 바디 필드에 Expression을 사용하여 "replyMQ"라는 값을 입력하여 응답 전문으로 사용한다.

    figure mq inbound mapping
    응답 매핑

5.2. 아웃바운드 거래 설정

본 예제에서 사용된 거래는 request-response 방식으로 구동되며, Fixed-length 타입의 전문을 요청 메시지로 사용한다.

  1. 예제에서 사용된 거래의 구조는 다음과 같다.

    figure mq outbound biztx tree
    거래 트리

    거래그룹에 헤더 메시지가 정의되어 있고, 거래에 바디 메시지를 정의하며, 각각 길이가 4, 7인 fixed-length 타입의 메시지를 가진다.

    전문 구조는 다음과 같다.

    메시지 ID 필드명 필드 타입 필드 길이

    Header

    txCode

    string

    4

    Body

    body

    string

    7

  2. 다음과 같이 예제에서 호출될 플로우를 작성한다. 헤더와 바디 두 메시지를 요청 메시지로 입력 받는다.

    figure mq outbound flow
    플로우
  3. 상기 플로우의 MQ 액티비티에서 호출할 아웃바운드 룰은 다음과 같다.

    헤더와 바디 두 메시지를 요청 메시지로 보내고, 동일한 메시지를 응답으로 받는다. 응답 큐에 대한 정보는 아웃바운드 엔드포인트의 것을 사용할 것이기 때문에 별도 기재하지 않는다. 만약 아웃바운드 룰에 별도로 설정할 경우 엔드포인트의 것 보다 우선하여 적용되며, 엔드포인트의 큐 관리자와 동일한 큐 관리자에서 큐를 지정해야 한다.

    figure mq outbound rule
    아웃바운드 룰

    아웃바운드 룰 설정 정보는 다음과 같다.

    항목 설정값

    아웃바운드룰 ID

    MqOutboundRule

    아웃바운드룰 이름

    MQ아웃바운드룰

    요청처리 타임아웃(ms)

    10000

    Endpoint(Group)

    MQ_OUT_EP01

    요청 메시지

    Header, Body (둘 다 FixedLength)

    정상 응답 메시지

    Header, Body (둘 다 FixedLength)

  4. 예제를 구동하기 위해 요청 매핑에 Expression을 사용하여 각 필드에 테스트에 사용할 값을 입력한다.

    figure mq outbound request mapping
    요청 매핑
  5. 응답 값이 정상적으로 들어오는지를 확인하기 위하여 출력 매핑에서 입력 변수의 값을 확인할 수 있는 UserMapping 핸들러를 호출한다. 매핑 핸들러 생성 다이얼로그는 다음과 같다.

    figure create mapping handler
    매핑 핸들러 생성
    항목 설정값

    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]를 선택한다.

    figure mq outbound activity property
    액티비티 속성 팝업

    왼쪽 메뉴의 [아웃바운드 룰(서비스) 설정] 메뉴를 클릭하고, '응답 매핑 사용'을 체크한 뒤 [Mapping] 버튼을 클릭한다.

    figure mq response mapping
    아웃바운드 룰 응답 매핑 사용

    Mapping 화면 아래의 [Add User Class] 버튼을 클릭해서 작성한 유저 클래스의 풀 네임을 지정한다.

    figure mq outbound request mapping
    요청 매핑
    figure mq response mapping handler
    매핑 유저 클래스 설정

6. 배포

거래그룹/거래 배포정보를 설정한다.

figure deploy
거래 배포 화면

거래 배포 설정화면에 대한 자세한 사용법은 AnyLink 스튜디오 안내서를 참고한다.

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|||||####################################|#]