게이트웨이 큐 관리자로 겹치는 두 클러스터 작성

태스크의 지시사항에 따라 게이트웨이 큐 관리자가 포함된 중첩 클러스터를 구성합니다. 한 애플리케이션에 대한 메시지를 클러스터 내 다른 애플리케이션에 대한 메시지로부터 격리하는 다음 예에 대한 시작점으로 이 클러스터를 사용합니다.

이 태스크 정보

클러스터 메시지 트래픽 격리를 설명하는 데 사용되는 예제 클러스터 구성은 그림 1에 표시되어 있습니다. 예는 클러스터링: 다중 클러스터 전송 큐를 사용하는 애플리케이션 격리에 설명되어 있습니다.

그림 1. IBM® MQ 클러스터를 사용하여 허브 및 스포크 아키텍처에 배치된 클라이언트-서버 애플리케이션
이 다이어그램은 게이트웨이 큐 매니저 QM1 로 연결된 두 개의 겹치는 클러스터를 보여줍니다. 메시지는 게이트웨이 큐 관리자의 전송 큐 SYSTEM.CLUSTER.TRANSMIT.QUEUE를 거쳐
한 클러스터의 애플리케이션에서 다른 클러스터로 플로우됩니다. 메시지는 게이트웨이 큐 매니저의 별칭 큐를 통해 전달됩니다 QM1. 알리어스 큐 정의는 모든 클러스터에
클러스터됩니다. 클러스터 중 하나의 큐를 대상으로 지정합니다. 게이트웨이 큐 매니저의 큐 매니저 별칭 QM1 은 각 클러스터의 실제 큐 매니저를 가리킵니다.

예제를 구성하는 단계를 최소화하기 위해 현실적이기보다는 간단하게 구성했습니다. 이 예는 두 개의 개별 조직에서 작성된 두 개의 클러스터 통합을 나타낼 수 있습니다. 보다 현실적인 시나리오는 클러스터링: 클러스터 전송 큐 구성 방법 계획을 참조하십시오.

단계에 따라 클러스터를 구성하십시오. 클러스터는 클라이언트 애플리케이션에서 서버 애플리케이션으로의 메시지 트래픽을 격리하는 다음 예에서 사용됩니다.

지시사항은 각 클러스터에 두 개의 저장소가 있도록 두 개의 추가 큐 관리자를 추가합니다. 게이트웨이 큐 관리자( QM1 )는 성능상의 이유로 저장소로 사용되지 않습니다.

프로시저

  1. 게이트웨이 큐 관리자 QM1 를 생성하고 시작하고, 큐 관리자 QM2, QM3, QM4, QM5 를 생성합니다.
    crtmqm -sax -u SYSTEM.DEAD.LETTER.QUEUE QM n
    strmqm QmgrName
    
    참고: QM4QM5 는 클러스터의 백업 전체 저장소입니다.
  2. 각 큐 매니저에 대한 청취자를 정의하고 시작합니다.
    *... On QM n
    DEFINE LISTENER(TCP141 n) TRPTYPE(TCP) IPADDR(hostname) PORT(141 n) CONTROL(QMGR) REPLACE
    START LISTENER(TCP141 n)
    
  3. 모든 클러스터에 대해 클러스터 이름 목록을 작성하십시오.
    *... On gateway queue manager QM1
    DEFINE NAMELIST(ALL) NAMES(CL1, CL2) REPLACE
    
  4. CL1의 경우 QM2QM4 전체 저장소를 작성하고 CL2의 경우 QM3QM5 전체 저장소를 작성하십시오.
    1. CL1의 경우:
      *... On QM2 and QM4
      ALTER QMGR REPOS(CL1) DEFCLXQ(SCTQ)
      
    2. CL2의 경우:
      *... On QM3 and QM5
      ALTER QMGR REPOS(CL2) DEFCLXQ(SCTQ)
      
  5. 각 큐 관리자 및 클러스터의 클러스터 송신자 및 클러스터 수신자 채널을 추가하십시오.
    QM2, QM3, QM4QM5에서 다음 명령을 실행하십시오. 여기서 c, nm 는 각 큐 관리자에 대해 표 1 에 표시된 값을 사용합니다.
    표 1. 클러스터 1과 2를 작성하기 위한 매개변수 값
    큐 관리자
    클러스터
    c
    기타 저장소
    n
    이 저장소
    m
    QM2 1 4 2
    QM4 1 2 4
    QM3 2 5 3
    QM5 2 3 5
    *... On QMm
    DEFINE CHANNEL(CLc.QMn) CHLTYPE(CLUSSDR) CONNAME('localhost(141n)') CLUSTER(CLc) REPLACE
    DEFINE CHANNEL(CLc.QMm) CHLTYPE(CLUSRCVR) CONNAME('localhost(141m)') CLUSTER(CLc) REPLACE
    
  6. 각 클러스터에 게이트웨이 큐 매니저 QM1 를 추가합니다.
    *... On gateway queue manager QM1
    DEFINE CHANNEL(CL1.QM2) CHLTYPE(CLUSSDR) CONNAME('localhost(1412)') CLUSTER(CL1) REPLACE
    DEFINE CHANNEL(CL1.QM1) CHLTYPE(CLUSRCVR) CONNAME('localhost(1411)') CLUSTER(CL1) REPLACE
    DEFINE CHANNEL(CL2.QM3) CHLTYPE(CLUSSDR) CONNAME('localhost(1413)') CLUSTER(CL2) REPLACE
    DEFINE CHANNEL(CL2.QM1) CHLTYPE(CLUSRCVR) CONNAME('localhost(1411)') CLUSTER(CL2) REPLACE
    
  7. 클러스터 CL2의 큐 관리자 QM3 에 로컬 큐 Q1 를 추가하십시오.
    *... On QM3
    DEFINE QLOCAL(Q1) CLUSTER(CL2) REPLACE
    
  8. 각 클러스터된 큐에 대해 게이트웨이 큐 매니저 QM1 에 큐 별칭을 추가합니다.
    *... On gateway queue manager QM1
    DEFINE QALIAS(Q1A) CLUSNL(ALL) TARGET(Q1) TARGTYPE(QUEUE) DEFBIND(NOTFIXED) REPLACE
    
  9. 클러스터된 모든 큐 매니저에 대한 클러스터 큐 매니저 별칭 정의를 게이트웨이 큐 매니저의 QM1 에 추가합니다.

    응답(답장)이 필요한 각 부분 저장소마다 대기열 관리자 별칭이 필요합니다. 큐 매니저 별칭의 목적은 다음과 같습니다: 애플리케이션이 (다른 클러스터의 큐 매니저에서 시작된) ReplyTo 특성을 포함하는 요청 메시지를 처리하는 경우, 애플리케이션은 큐 매니저 별칭을 통해 요청에 응답할 수 있습니다.

    참고 : 다음 예에서 큐 관리자 별칭 이름은 QM2QM3 이며, 이는 QM2QM3 가 참조하는 실제 큐 관리자 이름( RQMNAME )과 동일합니다. 응용 프로그램이 실제 큐 관리자 이름을 알지 못하게 하려면 다른 이름을 사용할 수 있습니다. 예를 들어, 큐 관리자 별칭이 QM2 보다 PAYROLLQM 이 더 의미 있는 경우, 큐 관리자 별칭은 로 지정할 수 있습니다.
    *... On gateway queue manager QM1
    DEFINE QREMOTE(QM2) RNAME(' ') RQMNAME(QM2) CLUSNL(ALL) REPLACE
    DEFINE QREMOTE(QM3) RNAME(' ') RQMNAME(QM3) CLUSNL(ALL) REPLACE
    
    : 게이트웨이 큐 매니저의 큐 매니저 별칭 정의 QM1 는 다른 클러스터의 큐 매니저를 참조하는 메시지를 전송합니다. 클러스터링된 대기열 관리자 별칭을 참조하세요.

다음에 수행할 작업

  1. 큐 알리어스 정의 Q1A을(를) 사용하여 QM3 Q1 QM2(으)로 메시지를 전송하여 큐 알리어스 정의를 테스트하십시오.
    1. 샘플 프로그램 amqsputQM2에서 실행하여 메시지를 넣으십시오.

      C:\IBM\MQ>amqsput Q1A QM2
      Sample AMQSPUT0 start
      target queue is Q1A
      Sample request message from QM2 to Q1 using Q1A

      Sample AMQSPUT0 end

    2. 샘플 프로그램 amqsget를 실행하여 QM3Q1에서 메시지를 가져오십시오.

      C:\IBM\MQ>amqsget Q1 QM3
      Sample AMQSGET0 start
      message <Sample request message from QM2 to Q1 using Q1A>
      no more messages
      Sample AMQSGET0 end

  2. 임시 동적 응답 큐에서 요청 메시지를 송신하고 응답 메시지를 수신하여 큐 관리자 알리어스 정의를 테스트하십시오.

    다이어그램은 응답 메시지가 RQ(이)라는 임시 동적 큐로 되돌아가는 경로를 보여줍니다. QM3에 연결된 서버 애플리케이션은 큐 관리자 이름 QM2을(를) 사용하여 응답 큐를 엽니다. 대기열 관리자 이름 QM2 는 게이트웨이 대기열 관리자 QM1 의 클러스터된 대기열 관리자 별칭으로 정의됩니다. QM3 답장 메시지를 게이트웨이 큐 매니저 QM1 로 라우팅합니다. QM1은(는) 메시지를 QM2(으)로 라우트합니다.

    그림 2. 큐 관리자 알리어스를 사용하여 응답 메시지를 다른 클러스터로 리턴
    게이트웨이 큐 관리자를 통해 서버에서 클라이언트 애플리케이션으로 응답 메시지에 사용되는 경로입니다.

    라우팅이 작동하는 방식은 다음과 같습니다. 각 클러스터의 모든 큐 관리자는 게이트웨이 큐 관리자 QM1 에 큐 관리자 별칭 정의가 있습니다. 이러한 알리어스는 모든 클러스터에서 클러스터됩니다. 각 알리어스에서 큐 관리자로의 회색 파선 화살표는 각 큐 관리자 알리어스가 최소 하나 이상의 클러스터에 있는 실제 큐 관리자로 해석됨을 표시합니다. 이 경우 QM2 별명은 CL1CL2 클러스터 모두에서 클러스터되며 CL1의 실제 큐 관리자 QM2(으)로 해석됩니다. 서버 애플리케이션은 큐 이름 RQ에 대한 응답을 사용하여 응답 메시지를 작성하고 큐 관리자 이름 QM2에 응답합니다. 클러스터 CL2QM1 에 큐 매니저 별칭 정의 QM2 가 정의되어 있고 클러스터 CL2 에 큐 매니저 QM2 가 없기 때문에 메시지는 게이트웨이 큐 매니저 QM1 로 라우팅됩니다. 메시지를 대상 큐 관리자로 송신할 수 없으므로 이 메시지는 알리어스 정의가 있는 큐 관리자에게 송신됩니다.

    게이트웨이 큐 관리자( QM1 )는 메시지를 클러스터 전송 큐에 배치하여 QM2 로 전송합니다. 게이트웨이 큐 매니저 QM1QM2 에 대한 QM1 의 큐 매니저 별칭 정의가 QM2 를 실제 대상 큐 매니저로 정의하고 있기 때문에 메시지를 QM2 로 라우팅합니다. 정의는 순환되지 않습니다. 알리어스 정의는 실제 정의만 참조할 수 있고 알리어스는 그 자체를 가리킬 수 없기 때문입니다. 실제 정의는 게이트웨이 큐 매니저 QM1 에 의해 해결됩니다. QM1QM2 가 모두 동일한 클러스터 CL1 에 있기 때문입니다. 게이트웨이 큐 매니저 QM1CL1 의 저장소에서 QM2 에 대한 연결 정보를 찾아내고, 메시지를 QM2 로 라우팅합니다. 메시지가 QM1에 의해 재라우트되도록 하려면 서버 애플리케이션은 DEFBIND 옵션 MQBND_BIND_NOT_FIXED로 설정하여 응답 큐를 열어야 합니다. 서버 애플리케이션이 MQBND_BIND_ON_OPEN 옵션을 사용하여 응답 큐를 연 경우 메시지는 재라우트되지 않고 데드-레터 큐에 있게 됩니다.

    1. QM3에 트리거가 있는 클러스터된 요청 큐를 작성하십시오.
      *... On QM3
      DEFINE QLOCAL(QR) CLUSTER(CL2) TRIGGER INITQ(SYSTEM.DEFAULT.INITIATION.QUEUE) PROCESS(ECHO) REPLACE
      
    2. 게이트웨이 큐 매니저 QM1 에서 클러스터된 큐 별칭 정의( QR )를 만듭니다.
      *... On gateway queue manager QM1
      DEFINE QALIAS(QRA) CLUSNL(ALL) TARGET(QR) TARGTYPE(QUEUE) DEFBIND(NOTFIXED) REPLACE
      
    3. 샘플 에코 프로그램 amqsechQM3에서 시작하도록 프로세스 정의를 작성하십시오.
      *... On QM3
      DEFINE PROCESS(ECHO) APPLICID(AMQSECH) REPLACE
      
    4. 임시 동적 응답 큐를 작성하려면 QM2에서 샘플 프로그램 amqsreq에 대한 모델 큐를 작성하십시오.
      *... On QM2
      DEFINE QMODEL(SYSTEM.SAMPLE.REPLY) REPLACE
      
    5. 큐 알리어스 정의 QRA을(를) 사용하여 QM3 QR QM2(으)로 요청을 전송하여 큐 관리자 알리어스 정의를 테스트하십시오.
      1. QM3에서 트리거 모니터 프로그램을 실행하십시오.
        runmqtrm -m QM3
        
        출력은 다음과 같습니다.

        C:\IBM\MQ>runmqtrm -m QM3
        5724-H72 (C) Copyright IBM Corp. 1994, 2026. ALL RIGHTS RESERVED.
        01/02/2012  16:17:15: IBM MQ trigger monitor started.

        __________________________________________________
        01/02/2012  16:17:15: Waiting for a trigger message

      2. 샘플 프로그램 amqsreqQM2에서 실행하여 요청을 넣고 응답을 기다리십시오.

        C:\IBM\MQ>amqsreq QRA QM2
        Sample AMQSREQ0 start
        server queue is QRA
        replies to 4F2961C802290020
        A request message from QM2 to QR on QM3

        response <A request message from QM2 to QR on QM3>
        no more replies
        Sample AMQSREQ0 end