Aggiunta di una coda di trasmissione cluster per isolare il traffico di messaggi cluster inviati da un gestore code gateway

Modificare la configurazione dei cluster sovrapposti che utilizzano un gestore code gateway. Dopo il trasferimento dei messaggi di modifica a un'applicazione dal gestore code del gateway senza utilizzare la stessa coda di trasmissione o gli stessi canali degli altri messaggi cluster. La soluzione utilizza una coda di trasmissione cluster aggiuntiva per separare il traffico di messaggi in un singolo gestore code in un cluster.

Prima di iniziare

  1. Il gestore code del gateway deve essere su IBM® MQ.
  2. Costruite i cluster sovrapposti mostrati in Applicazione client-server distribuita su architettura hub e spoke usando i cluster IBM MQ in Creazione di due cluster sovrapposti con un gateway queue manager seguendo i passi di quell'attività.

Informazioni su questa attività

Sul gestore code del gateway, QM1, aggiungere una coda di trasmissione e impostarne l'attributo di coda CLCHNAME. Impostare CLCHNAME sul nome del canale ricevente del cluster su QM3 ; consultare Figura 1.

Questa soluzione presenta una serie di vantaggi rispetto alla soluzione descritta in Aggiunta di una definizione di coda remota per isolare i messaggi inviati da un gestore code gateway :
  • Richiede meno definizioni aggiuntive.
  • Supporta il bilanciamento del carico di lavoro tra più copie della coda di destinazione, Q1, su gestori code differenti nello stesso cluster, CL2.
  • Il gestore code del gateway passa automaticamente alla nuova configurazione quando il canale viene riavviato senza perdere alcun messaggio.
  • Il gestore code del gateway continua ad inoltrare i messaggi nello stesso ordine in cui li ha ricevuti. Ciò avviene anche se lo switch si verifica con i messaggi per la coda Q1 a QM3 ancora su SYSTEM.CLUSTER.TRANSMIT.QUEUE.

La configurazione in cui isolare il traffico dei messaggi del cluster Figura 1 non comporta un isolamento del traffico così elevato come la configurazione che utilizza code remote in Aggiunta di una definizione di coda remota per isolare i messaggi inviati da un gestore code gateway . Se il gestore code QM3 in CL2 ospita diverse code cluster e applicazioni server, tutte queste code condividono il canale cluster, CL2.QM3, connettendo QM1 a QM3. I flussi aggiuntivi vengono illustrati nella Figura 1 dalla freccia grigia che rappresenta il potenziale traffico di messaggi cluster da SYSTEM.CLUSTER.TRANSMIT.QUEUE al canale mittente del cluster CL2.QM3.

Il rimedio consiste nel limitare il gestore code ad ospitare una coda cluster in un determinato cluster. Se il gestore code ospita già un numero di code cluster, per soddisfare questa restrizione è necessario creare un altro gestore code oppure creare un altro cluster; Vedere Aggiunta di un cluster e di una coda di trasmissione cluster per isolare il traffico dei messaggi del cluster inviato da un gestore code del gateway .

Figura 1. Applicazione client-server distribuita all'architettura hub e spoke utilizzando una coda di trasmissione cluster aggiuntiva.
Il diagramma mostra due cluster sovrapposti connessi da un gestore code gateway. Un messaggio fluisce da un'applicazione in un cluster all'altro, attraverso la coda di trasmissione, XMITQ.CL2.QM3, nel gestore code del gateway. Il messaggio viene instradato da una coda alias nel gestore code del gateway. La coda alias è raggruppata in cluster in tutti i cluster. È indirizzato a una coda in CL2. Gli alias del gestore code nel gestore code del gateway puntano ai gestori code reali in ciascun cluster.

Procedura

  1. Creare una coda di trasmissione cluster aggiuntiva per il canale mittente del cluster CL2.QM3 nel gestore code del gateway, QM1.
    *... on QM1
    DEFINE QLOCAL(XMITQ.CL2.QM3) USAGE(XMITQ) CLCHNAME(CL2.QM3)
    
  2. Passare all'utilizzo della coda di trasmissione, XMITQ.CL2.QM3.
    1. Arrestare il canale mittente del cluster CL2.QM3.
      *... On QM1
      STOP CHANNEL(CL2.QM3)
      

      La risposta è che il comando è accettato:


      AMQ8019: Stop IBM MQ channel accepted.
    2. Verifica che il canale CL2.QM3 sia arrestato

      Se il canale non si arresta, è possibile eseguire nuovamente il comando STOP CHANNEL con l'opzione FORCE . Un esempio di impostazione dell'opzione FORCE è se il canale non si arresta e non è possibile riavviare l'altro gestore code per sincronizzare il canale.

      *... On QM1
      start
      

      La risposta è un riepilogo dello stato del canale


      AMQ8417: Display Channel Status details.
      CHANNEL(CL2.QM3)             CHLTYPE(CLUSSDR)
      CONNAME(127.0.0.1(1413))     CURRENT
      RQMNAME(QM3)                 STATUS(STOPPED)
      SUBSTATE(MQGET)              XMITQ(SYSTEM.CLUSTER.TRANSMIT.QUEUE)

    3. Avviare il canale, CL2.QM3.
      *... On QM1
      START CHANNEL(CL2.QM3)
      

      La risposta è che il comando è accettato:


      AMQ8018: Start IBM MQ channel accepted.
    4. Verificare che il canale sia stato avviato
      *... On QM1
      DISPLAY CHSTATUS(CL2.QM3)
      

      La risposta è un riepilogo dello stato del canale:


      AMQ8417: Display Channel Status details.
      CHANNEL(CL2.QM3)                   CHLTYPE(CLUSSDR)
      CONNAME(127.0.0.1(1413))           CURRENT
      RQMNAME(QM3)                       STATUS(RUNNING)
      SUBSTATE(MQGET)                    XMITQ(XMITQ.CL2.QM3)

    5. Controllare che la coda di trasmissione sia stata commutata

      Monitorare il log degli errori del gestore code del gateway per il messaggio AMQ7341The transmission queue for channel CL2.QM3 is XMITQ.CL2.QM3.

Cosa fare successivamente

Verificare la coda di trasmissione separata inviando un messaggio da QM2 a Q1 su QM3 utilizzando la definizione dell'alias della coda Q1A

  1. Eseguire il programma di esempio amqsput su QM2 per inserire un messaggio.

    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. Eseguire il programma di esempio amqsget per richiamare il messaggio da Q1 on QM3

    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