Duplication de messages avec WMQ V7

Depuis le temps que l’on déploie des applications MQ, quel administrateur n’a pas souhaité un jour dupliquer simplement un flux de messages vers deux files différentes ?

Bien sûr, des solutions existent, comme des applications (plus ou moins transactionnelles) faisant MQget suivi de 2 x MQPut, des exit de message ou de canal, … bref rien de très satisfaisant ni de très robuste.

Mais avec MQ Version 7, tout va changer …

Rappels sur MQ PubSub V7

Le PubSub (Publication / Souscription) est une possibilité additionnelle apportée par la version 7 de WebSphere MQ. C’est un nouveau paradigme applicatif qui permet de créer des applications avec un niveau de découplage plus élevé que celui apporté par le messaging MQ.

Le principe est assez semblable aux flux RSS : Une application « publie » du contenu (demande de dispo, commandes, BL, …) sous forme de messages MQ dans une « Rubrique » (Topic). D’autres applications s’ « abonnent » à cette rubrique, et reçoivent les messages MQ correspondants.

Les applications qui publient n’ont pas connaissance des applications qui sont abonnées. Le routage des messages est effectué par le module « broker » de WebSphere MQ version 7.

Au-delà des API MQ classiques (MQPut, MQGet, …), il existe en version 7 de nouvelles API qui permettent de mettre en œuvre le PubSub dans les applications. Il est également possible d’utiliser le PubSub avec des applications MQ non modifiées (développées pour WMQ version 5.3 ou 6.0), grâce à plusieurs particularités de MQ V7 :

  • Il est maintenant possible de faire pointer une file alias sur une Rubrique. Ceci permet à une application existante de publier des flux de type PubSub.
  • La « souscription administrative » permet, via une commande MQSC, d’abonner une file existante à une Rubrique. Cette file recevra alors les messages de la Rubrique, messages qui pourront être consommés par une application MQ « non PubSub ».

Application à la duplication de messages

En combinant les deux particularités ci-dessus il est possible, en utilisant des applications “MQ V6” non modifiées, d’utiliser le Pub/Sub V7 pour dupliquer les messages.

Soit une application A, qui pose des messages dans une file MQ. On souhaite que les applications B et C puissent chacune disposer d’une copie des messages déposés par l’application A.

On va donc créer :

    • une rubrique (RUB1)
    • une file alias Q1, pointant vers la rubrique RUB1
    • des files locales Q2 et Q3
    • des souscriptions à la rubriques SUB1 pour les files Q2 et Q3

Exemple en MQSC :


* Duplication d'un flux MQ via PubSub V7
* Luc-Michel Demey 03/2010

DEFINE TOPIC('RUB1') +
TOPICSTR(' ') +
REPLACE
DEFINE QALIAS('Q1') +
TARGTYPE(TOPIC) +
TARGET('RUB1') +
REPLACE
DEFINE QLOCAL('Q2') +
REPLACE
DEFINE QLOCAL('Q3') +
REPLACE
DEFINE SUB('ABO_Q2') +
TOPICOBJ('RUB1') +
DESTCLAS(PROVIDED) +
DEST('Q2') +
REPLACE
DEFINE SUB('ABO_Q3') +
TOPICOBJ('RUB1') +
DESTCLAS(PROVIDED) +
DEST('Q3') +
REPLACE

Résultat :

Lors du dépôt d’un message dans Q1 par l’application A, ce dernier va se retrouvé publié dans RUB1.

Q2 et Q3 étant abonnés à cette rubrique, les deux files vont recevoir une copie du message.

Les applications B et C vont donc pouvoir disposer chacune de leur copie de message.

_c_2010_Demey_Consulting.png

Conclusion

La mise en œuvre des fonctions PubSub de MQ V7 de base est relativement peu intrusive dans une architecture existante, dans la mesure où il n’est pas nécessaire de modifier les applications existantes.

Ceci peut être une solution simple pour transformer des applications aujourd’hui 1 to 1 en applications 1 to n, n to 1, ou n to n, et permettre ainsi une évolution en douceur du Système d’Information de l’entreprise.