ActiveMQ – Les wilcards
J’ai découvert aujourd’hui une fonctionnalité très intéressante et très pratique du célèbre broker de messages ActiveMQ.
Il s’agit des wilcards
.
Consumer
Du point de vue du consommateur (consumer), il est possible grâce à quelques caractères spéciaux de consommer des messages de plusieurs destinations (queues et topics).
ActiveMQ décompose le nom des destinations en éléments. Les éléments dans le nom sont délimités par un point (.).
Par exemple, les destinations suivantes comportent donc 3 éléments :
queue.france.rennes queue.france.paris
Voici les caractères spéciaux :
- . sépare les éléments
- * correspond à un élément
- > correspond à un ou aux éléments restants
Par exemple, pour consommer tous les messages pour la France, nous pouvons déclarer le consommateur ci-dessous
-
String brokerURI = ActiveMQConnectionFactory.DEFAULT_BROKER_URL;
-
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(brokerURI);
-
Connection connection = connectionFactory.createConnection();
-
connection.start();
-
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-
Queue france = session.createQueue(“*.france.*”);
-
MessageConsumer consumer = session.createConsumer(france);
-
Message message = consumer.receive();
ou encore
-
Queue france = session.createQueue(“*.france.>”);
Producer
A l’inverse, le producteur du message peut également envoyer un message vers plusieurs destinations (on parle alors généralement de broadcast). Il s’agit de n messages strictement identiques postés vers n destinations. Cela évite d’avoir à créer plusieurs producers pour réaliser plusieurs fois le même envoi.
On parle de destination composite.
-
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-
Queue compositeDestination = session.createQueue(“queue.france.rennes, queue.france.paris”);
-
MessageProducer producer = session.createProducer(compositeDestination);
-
Message message = session.createStreamMessage() ;
-
producer.send(message);
Remarque : Nous avons plusieurs messages indépendants avec un contenu totalement identique (header et body).
Attention, une destination composite nommée queue.france.*
n’enverra pas les messages vers toutes les files de messages, mais vers la file nommée queue.france.*
.
Conclusion
Les wilcards sont très puissants et peuvent nous faciliter la vie avec une syntaxe très intuitive. Attention cependant, cela n’est pas un standard JMS, mais 100% spécifique au produit ActiveMQ.