2. ActiveMQ
2.1. Présentation
Sorti en 2004, ActiveMQ est le MOM open source de la fondation
Apache. Il est distribué sous licence Apache 2.0.
Active MQ s'appuie sur quelques autres projets Apache :
Ø Apache Camel : Implémentation partielle des
« Entreprise Integration Patterns », que nous avons
évoqués plus haut.
Ø Jetty : Serveur d'application Java
intégré à Active MQ
Et Active MQ est à son tour utilisé par quelques
autres grands projets :
Ø ESB : Active MQ est utilisé par plusieurs ESBs
(Enterprise Service Bus) tels qu'Apache Service Mix et Mule.
Ø Serveur J2EE : Active MQ est intégré au
serveur d'application Geronimo (certifié JEE5) comme fournisseur JMS par
défaut.
Ø Axis et CXF : Extension de Active MQ.
2.1. Caractéristiques principales du
produit
2.1.1 Langages d'implémentation
Le code source récupéré du SVN, ne semble
pas toujours être d'une qualité exemplaire. La mise en forme du
code laisse à désirer et certaines parties ne respectent pas les
bonnes pratiques de codage Java : peu d'interfaces, classes et méthodes
trop longues, ... Mais la robustesse du produit est néanmoins
réputée.
2.1.2 Langages pris en charge
La diversité des langages et environnements
supportés est particulièrement grande, et c'est un des grands
atouts de Active MQ.
Comme on l'a évoqué, l'aptitude à faire
échanger des applications hétérogènes fait partie
des missions naturelles d'un middleware.
Les langages à partir desquelles on peut accéder
à Active MQ sont :
Ø C : grâce à la bibliothèque
OpenWire C Client ;
Ø C++ : grâce à CMS : C'est une
bibliothèque C / C++ proposant des interfaces similaires à
JMS ;
Ø Ajax, RESTful et SOAP : sous condition d'utilisation
des passerelles proposées par Active MQ. (La passerelle est sous forme
d'un servlet Java, fonctionnant sur Jetty, ou autre) ;
Ø .Net : grâce à NMS : C'est une
bibliothèque .Net proposant des interfaces similaires à
JMS ;
Ø Delphi and FreePascal grâce à Habari
Active MQ Client ;
Ø Perl, PHP, Pike, Python, Ruby, grâce au
protocole STOMP et aux librairies client correspondantes.
On voit que le choix du duo STOMP et OpenWire comme protocole
de communication a ouvert la voie à l'implémentation d'APIs dans
de nombreux environnements.
De plus, s'agissant de protocoles ouverts et bien
spécifiés, il est possible de réaliser un client STOMP
vers ActiveMQ depuis de nouveaux environnements s'il en manquait à la
liste.
2.1.3 Protocoles pris en charge
Les protocoles prit en charge par Active MQ sont les suivants
:
Ø AMQP : Ce protocole est pris en charge,e mais comme
sa définition est volatile, Active MQ prend en charge uniquement les
versions 0.8 / 0.9 ;
Ø OpenWire : Protocole de communication
messages ;
Ø STOMP : Protocole de communication messages ;
Ø JXTA : C'est un protocole permettant de créer
des réseaux au-dessus des réseaux. JXTA (pour juxtapose),
défini par une série de protocoles légers conçus
pour gérer n'importe quelle application peer-to-peer. JXTA est
compatible avec l'ensemble des plateformes informatiques.
L'implémentation Java est basée sur du XML. Avec Active MQ, il
agit en tant que connecteur ;
Ø XMPP : Le protocole de messagerie instantanée
utilisé par Jabber. Ainsi, on peut se connecter au MOM grâce
à un client de messagerie de type Jabber ;
Ø En ce qui concerne les protocoles proposés par
des passerelles :
Grâce aux sous-projets Axis et CXF de Apache, Active MQ
gère SOAP, REST, ...
Ø TCP ;
2.1.4 Interfaces prises en charge
Selon les classes d'interface :
Ø Messagerie ;
Ø JCA 1.5 sous Java ;
Ø JMS 1.1 et 1.0.2b sous Java ;
Ø NMS à partir des plateformes .Net ;
Ø CMS à partir des plateformes C/C++ ;
Ø Administration, Monitoring, Configuration ;
Ø JMX, XML, Spring, Java DSL et par messages.
2.2. Gestion des messages
Mis à part la gestion standard des messages
imposée par la spécification JMS 1.1, Active MQ gère :
Ø Groupe de messages : Ceci est un concept
intéressant dans la mesure où il assure que tous les messages
d'un même groupe soient reçus par un consommateur
déterminé. Les messages d'un groupe X seront consommés
uniquement par le consommateur privilégié. Si celui-ci meurt,
Active MQ choisit automatiquement un autre consommateur suivant la
configuration.
Ø Notion de sélecteur de messages compatible
avec XPATH (et SQL 92 issue de la spécification JMS).
Ø Cependant, il n'y a pas de notion de priorité
des messages. Il est possible de la simuler en utilisant des groupes de
messages ou bien des sélecteurs.
Ø Destination virtuelle : Il est possible de
définir des topics et des queues redirigeant vers des composants du
même domaine (topic vers topic et queue vers queue).
Ø « Total Ordering» : Active MQ a la
possibilité d'assurer que l'ordre de réception des messages
correspond bien à l'ordre d'envoi.
Ø Et bien d'autres, issues des EIP.
2.2.1 Traitement des messages
Le traitement des messages d'Active MQ est sans doute son plus
célèbre atout, après celui de sa grande
connectivité. À l'aide du projet Camel qui est
intégré, il a la possibilité de traiter les messages selon
les modèles d'intégration d'entreprises (EIP).
Citons un exemple faisant d'Active MQ un EAI à part
entière. Les fonctionnalités de routage et de transformation
représentent les caractéristiques principales des EAIs.
2.2.2 Gestion des transactions
Bien qu'il n'existe pas de documentation sur la méthode
de gestion des transactions en interne, ActiveMQ nous donne quelques pistes.
Par exemple, la journalisation du « Message Store »
permet la reprise sur incident sans perte de données lors d'un «
rollback» (retour arrière).
Attention, par défaut, le routage et la transformation
des messages ne sont pas transactionnels. Une « Dead Message Queue »
est présente.
2.2.3 Persistance des messages
Active MQ a introduit un mode de persistance appelé
« Active MQ Message Store » qui joint un stockage de données
sous forme de fichiers avec un système de journalisation et de mise en
cache. Il affiche des performances supérieures au système de
persistance sur fichier ou base de données seule. Il affiche aussi une
meilleure fiabilité, car il a été bâti pour le
transactionnel.
Regardons de plus près son fonctionnement.Lors de
l'écriture d'une donnée, le message réside en cache
(Mémoire volatile). On construit sa référence
(identification) qui sera stockée dans le journal des
références. Périodiquement, une copie du journal des
références caché est réalisée sur le support
persistant. Ceci représente le journal des références
persistant. De plus, si la donnée n'a pas été
consultée depuis longtemps (configurable), elle est
déplacée vers média persistant (d'une façon
transactionnelle) et ses références sont mises à jour
(cache et persistant).
Lors d'une lecture, on accède soit directement à
la donnée en cache, soit dans le média de stockage.Lors d'une
transaction, Active MQ ne modifie que les références des
messages.Active MQ recommande d'avoir un nombre de messages inférieur
à 1 million par page de cache. Le nombre de page de cache n'est pas
limité.
2.3 Interopérabilité avec d'autres
MOMs
Active MQ fournit une passerelle JMS aisément
configurable (DSL, Spring XML). L'authentification est aussi prise en compte
par les fichiers de configuration. Ces fichiers de configuration peuvent
être intégrés à ceux d'Active MQ.
2.4 Gestion de la sécurité et d'un
annuaire
L'authentification et la gestion des droits sont
intégrées sous forme de plugins dans Active MQ. Les plugins
proposés par défaut s'appuient sur JAAS ou sur des fichiers
XML.L'interconnexion entre brokers peut aussi être
sécurisée par mot de passe et / ou chiffrement (SSL). Il est
possible d'encapsuler les connexions dans du SSL entre les clients et un broker
pour sécuriser les échanges. Le SSL se comporte donc comme un
connecteur à part entière.Il possible de lier la
sécurité de la plateforme avec un serveur LDAP.
Active MQ fournit une interface de personnalisation via des
«Interceptors». Il est un ainsi possible d'étendre les
possibilités de Active MQ très facilement.
L'exemple le plus commun serait la gestion de
l'authentification. Les «Interceptors» permettent de modifier
certains comportements internes sans changer le coeur d'Active MQ et en
compatibilité avec les versions futures.
2.5 Administration
Le monitoring et l'administration de la plateforme sont
proposés :
Ø à travers de l'interface JMX ;
Ø au moyen d'une interface web (web console) ;
Ø par des messages : cette fonctionnalité est
aussi disponible à distance via le protocole XMPP (Voir le
Glossaire).
Active MQ propose des « Advisory Message » (message
d'information) qui permettent de connaître l'état du
système. Voici des exemples de métriques :
Ø Les connexions clients ;
Ø les files d'attentes créées et
détruites par les applications ;
Ø les messages expirés
Ø etc...
Les « Advisory Messages » sont organisés en
queues et topics protégés par mot de passe. On peut y
accéder à partir d'un simple client Active MQ (JMS ou autre).
Active MQ implémente aussi des « Mirrored Queues
» : les messages envoyés à une file d'attente seront, de
manière transparente, envoyés sur un Topic. Même si cette
fonctionnalité est à utiliser avec précaution, elle permet
à un ou plusieurs clients de suivre l'état d'une file d'attente.
C'est l'application du design «WireTap» (les écoutes
téléphoniques pratiquées par les espions) d'EIP.
De plus, Active MQ nous fournit une interface d'administration
Web.
Cette interface est démarrée par défaut
à l'aide de Jetty. Elle démarre par défaut à
l'adresse suivante : HTTP://0.0.0.0:8161/admin
2.6 Configuration et déploiement
Active MQ peut être installé sur n'importe quelle
plateforme supportant au minimum Java 5.
Ø Active MQ est configurable en utilisant des fichiers
XML intégrables à Spring.
Ø Active MQ se configure aussi à l'aide de Java
DSL.
Ø Active MQ peut aussi être configuré et
lancé à partir d'un autre programme (Java), c'est la notion de
« Embedded Broker » : le broker n'est plus un processus
indépendant auquel le programme s'adresse par le réseau, il
tourne dans le même processus que le programme client.
Active MQ est livré avec un ensemble d'exemples
codés en Java ou en Ruby. Tous les cas d'utilisation d'Active MQ ne sont
pas couverts par la trentaine d'exemples fournis.
|