2015-05-27 9 views
6

Posso usare Java MQ Api per inserire e ricevere messaggi. Posso anche disabilitare get e mettere su una coda.L'API MQ supporta l'alias modificato

Durante un progetto di migrazione, avremo un'app in esecuzione parallell. Vecchio e nuovo. Vecchio e Nuovo avranno le loro code separate. Di solito ho messaggi da un cliente che va su Old. Occasionalmente, le msg devono passare a New invece.

chiedersi se MQ supporta un concetto gate/switch. dove tramite API posso puntare una coda per andare solo a New, o solo a Old, per un breve periodo.

Cercando di evitare l'instradamento basato su messaggi tramite WMB poiché non devo farlo oggi. La modalità parallela è solo per pochi mesi.

risposta

3

Non si menziona la versione di MQ o se esistono affinità o dipendenza dal mantenimento di MQMD.MsgID. Questi sono fondamentali nell'elaborare una soluzione a questo problema. Proverò a descrivere abbastanza opzioni in modo che almeno una sarà valida qualunque sia la versione in cui ti trovi.

Pub/Sub
La cosa più semplice da fare è di avere i messaggi arrivano su un alias su un argomento. Qualsiasi messaggio che arriva è pubblicato immediatamente su quell'argomento. Quindi è semplice generare abbonamenti amministrativi per indirizzare i messaggi alle code su cui le app che richiedono i messaggi sono in ascolto. Questa è interamente una modifica alla configurazione e non richiede componenti, processi o codice esterni. È disponibile dalla v7.1 di MQ e versioni successive, vale a dire una qualsiasi delle versioni attualmente supportate di MQ.

Il lato negativo è che IBM MQ cambierà il MQMD.MsgID dal momento in cui il messaggio viene ricevuto sull'argomento al momento in cui viene pubblicato nella coda di input dell'applicazione. Ciò interrompe la capacità dell'applicazione di utilizzare lo MQMD.MsgID del messaggio in arrivo come ID di correlazione durante la risposta. Se l'app richiedente precarica l'ID di correlazione o non si basa su un ID di correlazione, questo non è un problema.

Aliasing
Ma per le applicazioni in cui questo è un problema, diventa un po 'più difficile. È possibile eseguire l'alias su una coda e i messaggi in entrata vengono assegnati all'alias. Quando è necessario passare da una coda a un'altra, si modifica l'alias. Ci sono un paio di problemi con questo. Il primo è che non è mai possibile consegnare il flusso dei messaggi a più di una delle applicazioni. In un test di elaborazione parallelo è spesso preferibile eseguire esattamente questo e quindi confrontare i report di riepilogo o dettaglio.

Il secondo problema è di natura più operativa. Non è possibile modificare l'alias mentre è aperto. Se i messaggi arrivano su un RCVR, RQSTR o sul canale `CLUSRCVR, nessun problema. Interrompere il channe, cambiare l'alias e riavviare il canale. In una serie di comandi di script MQSC questo può essere fatto più velocemente di quanto possa essere digitato. Tuttavia, se le applicazioni che inseriscono i messaggi sono collegate in modalità binding o tramite client direttamente nell'alias, devono essere tutte arrestate per modificare l'alias.

Detto questo, l'aliasing funziona su tutte le versioni di MQ out of the box.

copia fisica
Una soluzione che è stato intorno per un bel po 'di tempo è quello di utilizzare il programma Q (SupportPac MA01) per indirizzare i messaggi. In questo scenario, la coda su cui atterrano i messaggi è una coda locale.Il programma Q viene attivato o impostato per l'ascolto costante in coda. Quando arriva un messaggio, Q quindi lo copia su una o entrambe le code di destinazione.

Commutazione del comportamento se Q viene attivato comporta predefinire 2 o 3 processi in cui ciascuna definisce un comportamento diverso - spostare nuovi messaggi QUEUEA, a QUEUEB oa entrambi. Cambiando l'attributo PROCESS della coda in modo che punti a un processo diverso, si ottiene una modifica istantanea del comportamento.

In alternativa, se Q è configurato per l'ascolto in coda per sempre, la modifica comporta l'uso di tre diversi script per eseguirlo dove si copiano i messaggi in QUEUEA, un altro in QUEUEB e un altro in entrambe le code. Cambiare il comportamento implica uccidere lo script e avviarne uno diverso.

Il programma Q funziona con tutte le versioni di MQ, indipendentemente dal fatto che sia attivato o programmato.

Gli svantaggi di questo approccio includono l'ovvio - parti più mobili. Devi attivare la coda o fare in modo che un programma transazionale agisca come un demone. Non è difficile, ma se stai scommettendo il business su di esso allora forse un po 'di monitoraggio è al fine di assicurarsi che la coda di input non inizia a costruire.

Raccomandazione
Di tutti questi metodi, mi davvero come il Pub versione/Sub. È estremamente affidabile, ha le parti meno mobili e se qualcosa si rompe è sotto il supporto di IBM. Quando hai bisogno di cambiare qualcosa, puoi farlo con un impatto minimo sulle applicazioni in esecuzione. Se possibile, usalo.