Sunday, November 27, 2016

Implémentation de Spring Boot messaging avec Rabbit MQ.

Dans un cas idéal, toutes les interactions microservice devraient se produire de manière asynchrone en utilisant la sémantique ou design pattern publish-subscribe (comme twitter oui). A cet effet Spring Boot fournit un mécanisme (sans maux de tête) pour configurer ces solutions de messaging:




Dans cet exemple, nous créerons une application Spring Boot avec un émetteur(Sender) et un récepteur(Receiver), tous deux connectés via une file d'attente externe (RabbitMQ (queue)).
Il s'agit ici d'un exemple "hello world" très basique. le but étant surtout de comprendre le principe et de vérifier si RabbitMq fonctionne correctement sur votre ordinateur. Le plus intéressant est avenir dans mon prochain post ou j’implanterais l'application selon l’architecture Microservices.

Procédez comme suit:

prérequis: Pour cristalliser les concepts microservices, il est supposé que les composants suivants sont installés dans votre ordinateur.

Note: l’entièreté du code source est disponible via github: https://github.com/Georges73/springbootRabbitMq
  1. Démarrer STS 
  2. Accédez à File | New | Spring Starter Project
  3. Dans la section Name tapez : bootmessaging
  4. Selectionnez AMQP sous I/O






  1. Rabbit MQ sera également nécessaire pour cet exemple. Téléchargez et installez la dernière version de Rabbit MQ ici https://www.rabbitmq.com/download.html et suivez les étapes d'installation documentées sur le site. Une fois prêt, démarrez le serveur RabbitMQ via la commande suivante: $./ rabbitmq-server ou plus simple encore via Windows Services. Vous pouvez également installer une interface web pour accéder RabbitMq  (en anglais): https://cmatskas.com/getting-started-with-rabbitmq-on-windows/
  2. Effectuez les modifications de configuration dans le fichier application.properties de votre application Spring Boot sous src/main/resources pour refléter la configuration de RabbitMQ. La configuration suivante utilise le port, le nom d'utilisateur et le mot de passe par défaut de RabbitMQ:    
    spring.rabbitmq.host=localhost
    spring.rabbitmq.port=5672
    spring.rabbitmq.username=guest
    spring.rabbitmq.password=guest
  3. Ajoutez un composant d'expéditeur de message et une file d'attente nommée TestQ du type org.springframework.amqp.core.Queue au fichier Application.java sous src/main/java. RabbitMessagingTemplate est un moyen pratique d'envoyer des messages. L'avantage de Spring Boot est que ce dernier fournira implicitement toutes les configurations standard pour envoyer des messages. 
  4. @Component 
    class Sender {
     
     RabbitMessagingTemplate template;
    
     @Autowired
     Sender(RabbitMessagingTemplate template){
      this.template = template;
     }
     @Bean
     Queue queue() {
      return new Queue("TestQ", false);
     }
     
     public void send(String message){
      template.convertAndSend("TestQ", message);
     }
    }
    
    4. Pour recevoir le message, tout ce qui doit être utilisé est l'annotation @RabbitListener dans la           class Receiver.java toujours dans la classe Application.java. Spring Boot se chargera du reste


      @Component
      class Receiver {
      @RabbitListener(queues = "TestQ")
      public void processMessage(String content) {
       System.out.println(content);
      }
 
      }

    5. La dernière partie de cet exercice est de connecter l'expéditeur (Sender) à notre application principale et d'implémenter la méthode d'exécution de CommandLineRunner pour lancer l'envoi du message. Lorsque l'application est initialisée, elle appelle la méthode run() de CommandLineRunner, comme suit:

     @SpringBootApplication 
     public class Application implements CommandLineRunner{

 @Autowired
 Sender sender;
 
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
    
    @Override
    public void run(String... args) throws Exception {
     sender.send("Hello Messaging..!!!");
    }
}

   6. Exécutez l'application en tant qu'application Spring Boot (run as Spring boot app) et vérifiez la           sortie. Le message suivant sera imprimé dans la console:

    Hello Messaging..!!!






No comments:

Post a Comment