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

  1. String brokerURI = ActiveMQConnectionFactory.DEFAULT_BROKER_URL;
  2. ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(brokerURI);
  3. Connection connection = connectionFactory.createConnection();
  4. connection.start();
  5. Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
  6. Queue france = session.createQueue(« *.france.* »);
  7. MessageConsumer consumer = session.createConsumer(france);
  8. Message message = consumer.receive();

ou encore

  1. 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.

  1. Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
  2. Queue compositeDestination = session.createQueue(« queue.france.rennes, queue.france.paris »);
  3. MessageProducer producer = session.createProducer(compositeDestination);
  4. Message message = session.createStreamMessage() ;
  5. 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.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

%d blogueurs aiment cette page :