Skip to content

Instantly share code, notes, and snippets.

@ahmed-bhs
Last active October 16, 2018 15:08
Show Gist options
  • Save ahmed-bhs/edf225a4a4eee8ee9f64cb8d1b56b79e to your computer and use it in GitHub Desktop.
Save ahmed-bhs/edf225a4a4eee8ee9f64cb8d1b56b79e to your computer and use it in GitHub Desktop.

Revisions

  1. ahmed-bhs revised this gist Oct 3, 2018. 1 changed file with 10 additions and 10 deletions.
    20 changes: 10 additions & 10 deletions gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -10,19 +10,19 @@ Nous présentons aujourd'hui un petit retour d'expérience sur le composent Symf
    De nombreux de traitement web pourrait être assez lourd qui prennent parfois beaucoup de temps soit à cause d'un trafic intense,soit à cause d'une mauvaise architecture logicielle, soit à cause de la mauvaise gestion de mémoire, y a des gens qui préfèrent augmenter la mémoire ou bien mettre un système de `balance loader` ...Mais ca résout pas le problème principal.

    Bref, pour résoudre ce problème, on fait retour souvent à un mécanisme de file d'attente (ex: Standard Queue, FIFO Queue) pour effectuer des tâches chronophages et d’une manière ordonnancée et plus performante.
    ### Ordonnancement RabbitMQ
    # Ordonnancement RabbitMQ

    RabbitMQ est un système permettant de gérer des files de messages afin de permettre à différents clients de communiquer très simplement et plus efficacement. Pour que chaque client puisse communiquer avec Rabbit Mq, celui-ci s’appuie sur le protocole AMQP. Ce protocole définit précisément la façon d’ordonnancement asynchrone des messages.
    C’est un gestionnaire de queues, permettant d’à synchroniser différents traitements.
    C’est pour assurer la haute disponibilité du serveur, dédié aux d exécutions de traitements lourds comme l’envoi des e-mails, l’exportation, l'importation des fichiers et d'autres traitements durable.

    ### Le composant Messenger (disponible à partir la version symfony 4.1)
    # Le composant Messenger (disponible à partir la version symfony 4.1)

    Le composant messenger permet à l'application d'envoyer et de recevoir des messages vers / depuis d'autres applications ou via un système de queue basée sur un message bus. Le bus a pour rôle de dispatcher le messages et d’exécuter l'handler approprié au message . Durant ce processus le message va passer dans une pile ordonnée de notre middleware.
    Le composant nous fournit aussi des fonctionnalités de routage pour intercepter les messages et les router vers le bon Transporter déjà défini au niveau de notre configuration au-dessous de`config.yml`.

    ### Architecture
    <img src="https://i.imgur.com/otQrqfm.png">
    # Architecture
    <img width="100%" src="https://i.imgur.com/otQrqfm.png">
    Le composant est composé par différent elements qui respecte le principe de single responsabilité (poo solid) :

    <b>Message </b>: Objet PHP qui doit être sérialisable qui reprèsente un DTO (Data transfer object).
    @@ -59,7 +59,7 @@ Ok on y va !! … Nous allons présenter maintenant comment utiliser le compossa

    Imganions si nous devons enovyer à 60000 utilisateurs un mail de notification, évidament la page correspendante à notre route va continuer à charger tantque le boucle `for ($i = 1; $i <= 6000; $i++)` n'a pas terminé son parcours, et du coup ca va consommer énormement de mémoire et de plus ce n'est pas pratique ni supportable en terme de `User Experience`.

    ### First step : La MISE en palce de l'environnement:
    ## First step : La MISE en palce de l'environnement:

    Pour se faire, nous avons deux choix :<br>
    <b>La 1ere Méthode: installer notre environnement directement sur notre machine local </b>
    @@ -127,7 +127,7 @@ services:
    - "6379:6379"
    ```


    ## Second step: la mise en place des classes
    La création de notre Message : `SendNotification`
    ```
    namespace App\Message;
    @@ -243,7 +243,7 @@ Une fois que les messages ont été acheminés, nous pouvons les consommer avec
    `$ bin/console messenger:consume-messages messenger.default_receiver`

    et s'intervient `Supervisor` pour exécuter la commande d'une façon automatique, faudrait prendre en considération que le lancement de service supervisor arrête le service `php-fpm`, c'est pour cela que nous devons au niveau de la configuration le relancement de php-fpm en cas d'arrêt.
    ### Supervisor
    ## Third step: Supervisor

    ```
    [unix_http_server]
    @@ -266,7 +266,7 @@ stdout_logfile_maxbytes=10MB


    On pourait aussi lancer la commande `bin\console debug:messenger` c'est une commande CLI pour exposer les classes de message pouvant être dispatché à travers notre Messenger.
    <img src="https://i.imgur.com/iIe0lhK.png">
    <img width="100%" src="https://i.imgur.com/iIe0lhK.png">
    ### Configuration de notre mailer

    ```
    @@ -311,7 +311,7 @@ Afin de traiter les messages, il suffit de lancer la commande:

    Nous pouvons visualiser, lire le continue des messages et purger la queue à travers l'interface offerte par AWS SQS:

    <img src="https://i.imgur.com/ZOmtW5Q.png">
    <img width="100%" src="https://i.imgur.com/ZOmtW5Q.png">

    ### Utilisation de Redis
    Pour les gens qui prèfère `memcached`, on pourait suivre le meme démarche.
    @@ -336,7 +336,7 @@ Après nous allons remarquer la création automatique d'une CLE de type list `me
    Et finallement il suffit de lancer la commande: php bin/console messenger:consume redis pour pouvoir connsomer les différents messages.


    Je vous mettre ci dessous le lien du repo github pour notre exemple: https://github.com/ahmed-bhs/messenger-demo
    Je vous mettre le lien suivant pour le repo github de notre exemple: https://github.com/ahmed-bhs/messenger-demo

    That's it.<br>
    <img width="100%" src="https://media.giphy.com/media/11sBLVxNs7v6WA/giphy.gif" alt="">
  2. ahmed-bhs revised this gist Oct 3, 2018. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -338,6 +338,6 @@ Et finallement il suffit de lancer la commande: php bin/console messenger:consum

    Je vous mettre ci dessous le lien du repo github pour notre exemple: https://github.com/ahmed-bhs/messenger-demo

    That's it.<br> <a class="_2XBDTIVigBJDybhZvL-hU3" href="https://giphy.com/gifs/cheer-cheering-11sBLVxNs7v6WA?utm_source=iframe&amp;utm_medium=embed&amp;utm_campaign=Embeds&amp;utm_term=" target="_blank" onmouseover="trackEvent('Hover', 'Image')" onclick="trackEvent('Click', 'Image')" data-gif="">
    <img class="nlSABoG9CSaJpsufv8WW9 _3vYn8QjoEvrXxHyqdn9ddZ _2XBDTIVigBJDybhZvL-hU3" src="https://media.giphy.com/media/11sBLVxNs7v6WA/giphy.gif" alt=""> <img class="nlSABoG9CSaJpsufv8WW9 _3vYn8QjoEvrXxHyqdn9ddZ _2XBDTIVigBJDybhZvL-hU3" src="https://media.giphy.com/media/11sBLVxNs7v6WA/giphy.gif" alt="">
    That's it.<br>
    <img width="100%" src="https://media.giphy.com/media/11sBLVxNs7v6WA/giphy.gif" alt="">
  3. ahmed-bhs revised this gist Oct 3, 2018. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -339,5 +339,5 @@ Et finallement il suffit de lancer la commande: php bin/console messenger:consum
    Je vous mettre ci dessous le lien du repo github pour notre exemple: https://github.com/ahmed-bhs/messenger-demo

    That's it.<br> <a class="_2XBDTIVigBJDybhZvL-hU3" href="https://giphy.com/gifs/cheer-cheering-11sBLVxNs7v6WA?utm_source=iframe&amp;utm_medium=embed&amp;utm_campaign=Embeds&amp;utm_term=" target="_blank" onmouseover="trackEvent('Hover', 'Image')" onclick="trackEvent('Click', 'Image')" data-gif="">
    <img class="nlSABoG9CSaJpsufv8WW9 _3vYn8QjoEvrXxHyqdn9ddZ _2XBDTIVigBJDybhZvL-hU3" src="https://media.giphy.com/media/11sBLVxNs7v6WA/giphy.gif" alt="">
    <img class="nlSABoG9CSaJpsufv8WW9 _3vYn8QjoEvrXxHyqdn9ddZ _2XBDTIVigBJDybhZvL-hU3" src="https://media.giphy.com/media/11sBLVxNs7v6WA/giphy.gif" alt=""> <img class="nlSABoG9CSaJpsufv8WW9 _3vYn8QjoEvrXxHyqdn9ddZ _2XBDTIVigBJDybhZvL-hU3" src="https://media.giphy.com/media/11sBLVxNs7v6WA/giphy.gif" alt="">

  4. ahmed-bhs revised this gist Oct 3, 2018. 1 changed file with 1 addition and 3 deletions.
    4 changes: 1 addition & 3 deletions gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -339,7 +339,5 @@ Et finallement il suffit de lancer la commande: php bin/console messenger:consum
    Je vous mettre ci dessous le lien du repo github pour notre exemple: https://github.com/ahmed-bhs/messenger-demo

    That's it.<br> <a class="_2XBDTIVigBJDybhZvL-hU3" href="https://giphy.com/gifs/cheer-cheering-11sBLVxNs7v6WA?utm_source=iframe&amp;utm_medium=embed&amp;utm_campaign=Embeds&amp;utm_term=" target="_blank" onmouseover="trackEvent('Hover', 'Image')" onclick="trackEvent('Click', 'Image')" data-gif="">
    <video id="gif" class="_3vYn8QjoEvrXxHyqdn9ddZ _2XBDTIVigBJDybhZvL-hU3" src="https://media.giphy.com/media/11sBLVxNs7v6WA/giphy.mp4" autoplay="" loop="" muted="" playsinline="">
    <img class="nlSABoG9CSaJpsufv8WW9 _3vYn8QjoEvrXxHyqdn9ddZ _2XBDTIVigBJDybhZvL-hU3" src="https://media.giphy.com/media/11sBLVxNs7v6WA/giphy.gif" alt="">
    </video>
    <img class="nlSABoG9CSaJpsufv8WW9 _3vYn8QjoEvrXxHyqdn9ddZ _2XBDTIVigBJDybhZvL-hU3" src="https://media.giphy.com/media/11sBLVxNs7v6WA/giphy.gif" alt="">

  5. ahmed-bhs revised this gist Oct 3, 2018. 1 changed file with 1 addition and 2 deletions.
    3 changes: 1 addition & 2 deletions gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -342,5 +342,4 @@ That's it.<br> <a class="_2XBDTIVigBJDybhZvL-hU3" href="https://giphy.com/gifs/c
    <video id="gif" class="_3vYn8QjoEvrXxHyqdn9ddZ _2XBDTIVigBJDybhZvL-hU3" src="https://media.giphy.com/media/11sBLVxNs7v6WA/giphy.mp4" autoplay="" loop="" muted="" playsinline="">
    <img class="nlSABoG9CSaJpsufv8WW9 _3vYn8QjoEvrXxHyqdn9ddZ _2XBDTIVigBJDybhZvL-hU3" src="https://media.giphy.com/media/11sBLVxNs7v6WA/giphy.gif" alt="">
    </video>
    '<div class="_3aRLlClO7wY2OiqMkwRcGP _2XBDTIVigBJDybhZvL-hU3" style="background-image:url(https://media.giphy.com/media/11sBLVxNs7v6WA/200w_s.gif)"></div>'
    </a><div class="_3aRLlClO7wY2OiqMkwRcGP _2XBDTIVigBJDybhZvL-hU3" style="background-image:url(https://media.giphy.com/media/11sBLVxNs7v6WA/200w_s.gif)"></div>

  6. ahmed-bhs revised this gist Oct 3, 2018. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -343,4 +343,4 @@ That's it.<br> <a class="_2XBDTIVigBJDybhZvL-hU3" href="https://giphy.com/gifs/c
    <img class="nlSABoG9CSaJpsufv8WW9 _3vYn8QjoEvrXxHyqdn9ddZ _2XBDTIVigBJDybhZvL-hU3" src="https://media.giphy.com/media/11sBLVxNs7v6WA/giphy.gif" alt="">
    </video>
    '<div class="_3aRLlClO7wY2OiqMkwRcGP _2XBDTIVigBJDybhZvL-hU3" style="background-image:url(https://media.giphy.com/media/11sBLVxNs7v6WA/200w_s.gif)"></div>'
    </a>
    </a><div class="_3aRLlClO7wY2OiqMkwRcGP _2XBDTIVigBJDybhZvL-hU3" style="background-image:url(https://media.giphy.com/media/11sBLVxNs7v6WA/200w_s.gif)"></div>
  7. ahmed-bhs revised this gist Oct 3, 2018. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -338,7 +338,7 @@ Et finallement il suffit de lancer la commande: php bin/console messenger:consum

    Je vous mettre ci dessous le lien du repo github pour notre exemple: https://github.com/ahmed-bhs/messenger-demo

    This is it. <a class="_2XBDTIVigBJDybhZvL-hU3" href="https://giphy.com/gifs/cheer-cheering-11sBLVxNs7v6WA?utm_source=iframe&amp;utm_medium=embed&amp;utm_campaign=Embeds&amp;utm_term=" target="_blank" onmouseover="trackEvent('Hover', 'Image')" onclick="trackEvent('Click', 'Image')" data-gif="">
    That's it.<br> <a class="_2XBDTIVigBJDybhZvL-hU3" href="https://giphy.com/gifs/cheer-cheering-11sBLVxNs7v6WA?utm_source=iframe&amp;utm_medium=embed&amp;utm_campaign=Embeds&amp;utm_term=" target="_blank" onmouseover="trackEvent('Hover', 'Image')" onclick="trackEvent('Click', 'Image')" data-gif="">
    <video id="gif" class="_3vYn8QjoEvrXxHyqdn9ddZ _2XBDTIVigBJDybhZvL-hU3" src="https://media.giphy.com/media/11sBLVxNs7v6WA/giphy.mp4" autoplay="" loop="" muted="" playsinline="">
    <img class="nlSABoG9CSaJpsufv8WW9 _3vYn8QjoEvrXxHyqdn9ddZ _2XBDTIVigBJDybhZvL-hU3" src="https://media.giphy.com/media/11sBLVxNs7v6WA/giphy.gif" alt="">
    </video>
  8. ahmed-bhs revised this gist Oct 3, 2018. 1 changed file with 6 additions and 0 deletions.
    6 changes: 6 additions & 0 deletions gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -338,3 +338,9 @@ Et finallement il suffit de lancer la commande: php bin/console messenger:consum

    Je vous mettre ci dessous le lien du repo github pour notre exemple: https://github.com/ahmed-bhs/messenger-demo

    This is it. <a class="_2XBDTIVigBJDybhZvL-hU3" href="https://giphy.com/gifs/cheer-cheering-11sBLVxNs7v6WA?utm_source=iframe&amp;utm_medium=embed&amp;utm_campaign=Embeds&amp;utm_term=" target="_blank" onmouseover="trackEvent('Hover', 'Image')" onclick="trackEvent('Click', 'Image')" data-gif="">
    <video id="gif" class="_3vYn8QjoEvrXxHyqdn9ddZ _2XBDTIVigBJDybhZvL-hU3" src="https://media.giphy.com/media/11sBLVxNs7v6WA/giphy.mp4" autoplay="" loop="" muted="" playsinline="">
    <img class="nlSABoG9CSaJpsufv8WW9 _3vYn8QjoEvrXxHyqdn9ddZ _2XBDTIVigBJDybhZvL-hU3" src="https://media.giphy.com/media/11sBLVxNs7v6WA/giphy.gif" alt="">
    </video>
    '<div class="_3aRLlClO7wY2OiqMkwRcGP _2XBDTIVigBJDybhZvL-hU3" style="background-image:url(https://media.giphy.com/media/11sBLVxNs7v6WA/200w_s.gif)"></div>'
    </a>
  9. ahmed-bhs revised this gist Oct 3, 2018. 1 changed file with 0 additions and 1 deletion.
    1 change: 0 additions & 1 deletion gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -109,7 +109,6 @@ services:
    ports:
    - '80:80'
    rabbitmq:
    image: rabbitmq:3.4-management
    tty: true
  10. ahmed-bhs revised this gist Oct 3, 2018. 1 changed file with 10 additions and 6 deletions.
    16 changes: 10 additions & 6 deletions gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -97,19 +97,18 @@ services:
    volumes:
    - '.:/symfony'
    command: service supervisor start
    links:
    - rabbitmq
    nginx:
    build: docker/nginx
    tty: true
    restart: on-failure
    volumes_from:
    - php
    ports:
    - '80:80'
    volumes:
    - './public:/symfony'
    links:
    - php
    ports:
    - '80:80'
    rabbitmq:
    image: rabbitmq:3.4-management
    @@ -122,6 +121,11 @@ services:
    tty: true
    ports:
    - "1080:80"
    redis:
    image: redis
    tty: true
    ports:
    - "6379:6379"
    ```


  11. ahmed-bhs revised this gist Oct 3, 2018. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -27,7 +27,7 @@ Le composant est composé par différent elements qui respecte le principe de si

    <b>Message </b>: Objet PHP qui doit être sérialisable qui reprèsente un DTO (Data transfer object).

    <b>Transporter</b>: Par défaut, les messages sont traités d'une manière <b>asynchrone</b> dès leur distribution. <br>
    <b>Transporter</b>: Par défaut, les messages sont traités d'une manière <b>synchrone</b> dès leur distribution. <br>

    <b>Au cas où</b> nous préferons traiter les messages de manière asynchrone, vous devez configurer un transport. Ces transports ne communiquent avec notre application via des systèmes de file d'attente ce qu'on appelle brocker(RabbitMQ, Kafka, AWS, SQS, memcached et meme un base de données ou bien un système de fichier etc...)

  12. ahmed-bhs revised this gist Oct 3, 2018. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -41,7 +41,7 @@ Responsable de la désérialisation et de la transmission des messages aux gesti

    <b>Message Bus :</b> C'est le composant qui a pour role de <b>dispatcher</b> notre message, définir et exécuter le handler coresspondant associer à notre message.

    D'ailleurs le message Bus représente une approche de développement suivi par DDD (développement dirigé par d'amin) qui présente une architecture d'event sourcing ce qu'on appelle CQRS. L'une des architectures les plus recommandées qui résoudre énormément de problèmes de performance et de complexité algorithmique.
    D'ailleurs le message Bus représente une approche de développementbasé sur une architecture d'event sourcing ce qu'on appelle <b>CQRS</b>. L'une des architectures les plus recommandées qui résoudre énormément de problèmes de performance et de complexité algorithmique.

    <b>Worker</b>: Consomme les messages depuis les transports.

  13. ahmed-bhs revised this gist Oct 3, 2018. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -39,7 +39,7 @@ Responsable de la sérialisation et de l'envoi de messages. Cela peut être un c
    <b>Receiver (Récepteur) :</b>
    Responsable de la désérialisation et de la transmission des messages aux gestionnaires. Cela peut être un extracteur de file d'attente de messages ou un point de terminaison d'API, par exemple.

    <b>Message Bus :</b> C'est le composant qui a pour role de <b>dispatcher notre message, définir et exécuter le handler coresspondant associer à notre message.
    <b>Message Bus :</b> C'est le composant qui a pour role de <b>dispatcher</b> notre message, définir et exécuter le handler coresspondant associer à notre message.

    D'ailleurs le message Bus représente une approche de développement suivi par DDD (développement dirigé par d'amin) qui présente une architecture d'event sourcing ce qu'on appelle CQRS. L'une des architectures les plus recommandées qui résoudre énormément de problèmes de performance et de complexité algorithmique.

  14. ahmed-bhs revised this gist Oct 3, 2018. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -7,7 +7,7 @@ Nous présentons aujourd'hui un petit retour d'expérience sur le composent Symf
    3. Fonctionnement de Symfony Messenger.
    4. Le couplage de Symfony Messenger et RabbitMQ, SQS, Redis...afin d'envoyer des emails d'une façon asynchrone.

    De nombreux de traitement web pourrait être assez lourd qui prennent parfois beaucoup de temps soit à cause d'un trafic intense,soit à cause d'une mauvaise architecture logicielle, soit à cause de la mauvaise gestion de mémoire, y a des gens qui préfèrent augmenter la mémoire ou bien mettre un système de `balance loader` ...<b>Mais</b> ca résout pas le problème principal.
    De nombreux de traitement web pourrait être assez lourd qui prennent parfois beaucoup de temps soit à cause d'un trafic intense,soit à cause d'une mauvaise architecture logicielle, soit à cause de la mauvaise gestion de mémoire, y a des gens qui préfèrent augmenter la mémoire ou bien mettre un système de `balance loader` ...Mais ca résout pas le problème principal.

    Bref, pour résoudre ce problème, on fait retour souvent à un mécanisme de file d'attente (ex: Standard Queue, FIFO Queue) pour effectuer des tâches chronophages et d’une manière ordonnancée et plus performante.
    ### Ordonnancement RabbitMQ
    @@ -27,7 +27,7 @@ Le composant est composé par différent elements qui respecte le principe de si

    <b>Message </b>: Objet PHP qui doit être sérialisable qui reprèsente un DTO (Data transfer object).

    <b>Transporter</b>: Par défaut, les messages sont traités d'une manière <b>asynchrone<b/> dès leur distribution. <br>
    <b>Transporter</b>: Par défaut, les messages sont traités d'une manière <b>asynchrone</b> dès leur distribution. <br>

    <b>Au cas où</b> nous préferons traiter les messages de manière asynchrone, vous devez configurer un transport. Ces transports ne communiquent avec notre application via des systèmes de file d'attente ce qu'on appelle brocker(RabbitMQ, Kafka, AWS, SQS, memcached et meme un base de données ou bien un système de fichier etc...)

  15. ahmed-bhs revised this gist Oct 3, 2018. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -27,7 +27,7 @@ Le composant est composé par différent elements qui respecte le principe de si

    <b>Message </b>: Objet PHP qui doit être sérialisable qui reprèsente un DTO (Data transfer object).

    <b>Transporter</b>: Par défaut, les messages sont traités d'une manière <b>asynchrone</> dès leur distribution. <br>
    <b>Transporter</b>: Par défaut, les messages sont traités d'une manière <b>asynchrone<b/> dès leur distribution. <br>

    <b>Au cas où</b> nous préferons traiter les messages de manière asynchrone, vous devez configurer un transport. Ces transports ne communiquent avec notre application via des systèmes de file d'attente ce qu'on appelle brocker(RabbitMQ, Kafka, AWS, SQS, memcached et meme un base de données ou bien un système de fichier etc...)

  16. ahmed-bhs revised this gist Oct 3, 2018. 1 changed file with 1 addition and 0 deletions.
    1 change: 1 addition & 0 deletions gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -28,6 +28,7 @@ Le composant est composé par différent elements qui respecte le principe de si
    <b>Message </b>: Objet PHP qui doit être sérialisable qui reprèsente un DTO (Data transfer object).

    <b>Transporter</b>: Par défaut, les messages sont traités d'une manière <b>asynchrone</> dès leur distribution. <br>

    <b>Au cas où</b> nous préferons traiter les messages de manière asynchrone, vous devez configurer un transport. Ces transports ne communiquent avec notre application via des systèmes de file d'attente ce qu'on appelle brocker(RabbitMQ, Kafka, AWS, SQS, memcached et meme un base de données ou bien un système de fichier etc...)

    <b>Message Handler </b>: C’est ici qu’il pourra y avoir et exécuter le logique métier applicable aux messages. La classe `NotificationHandler` qui recevra les messages va représenter notre Handler.
  17. ahmed-bhs revised this gist Oct 3, 2018. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -22,7 +22,7 @@ Le composant messenger permet à l'application d'envoyer et de recevoir des mess
    Le composant nous fournit aussi des fonctionnalités de routage pour intercepter les messages et les router vers le bon Transporter déjà défini au niveau de notre configuration au-dessous de`config.yml`.

    ### Architecture
    <img src="https://i.imgur.com/3Edk085.png">
    <img src="https://i.imgur.com/otQrqfm.png">
    Le composant est composé par différent elements qui respecte le principe de single responsabilité (poo solid) :

    <b>Message </b>: Objet PHP qui doit être sérialisable qui reprèsente un DTO (Data transfer object).
  18. ahmed-bhs revised this gist Oct 3, 2018. 1 changed file with 4 additions and 4 deletions.
    8 changes: 4 additions & 4 deletions gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -18,7 +18,7 @@ C’est pour assurer la haute disponibilité du serveur, dédié aux d exécutio

    ### Le composant Messenger (disponible à partir la version symfony 4.1)

    Le composant messenger permet à l'application d'envoyer et de recevoir des messages vers / depuis d'autres applications ou via un système de queue basée sur un message bus. Un message bus est un composant très simple qui permet de dispatcher un objet (message). Le bus a pour rôle d’exécuter l'handler approprié au message disant "déspatché". Durant ce processus le message va passer dans une pile ordonnée de notre middleware.
    Le composant messenger permet à l'application d'envoyer et de recevoir des messages vers / depuis d'autres applications ou via un système de queue basée sur un message bus. Le bus a pour rôle de dispatcher le messages et d’exécuter l'handler approprié au message . Durant ce processus le message va passer dans une pile ordonnée de notre middleware.
    Le composant nous fournit aussi des fonctionnalités de routage pour intercepter les messages et les router vers le bon Transporter déjà défini au niveau de notre configuration au-dessous de`config.yml`.

    ### Architecture
    @@ -38,8 +38,8 @@ Responsable de la sérialisation et de l'envoi de messages. Cela peut être un c
    <b>Receiver (Récepteur) :</b>
    Responsable de la désérialisation et de la transmission des messages aux gestionnaires. Cela peut être un extracteur de file d'attente de messages ou un point de terminaison d'API, par exemple.

    <b>Message Bus :</b> C'est le composant qui a pour role de <b>définir et exécuter le handler approprié au message</b> le handler coresspondant associer à notre message. Il permet de dispatcher notre message.

    <b>Message Bus :</b> C'est le composant qui a pour role de <b>dispatcher notre message, définir et exécuter le handler coresspondant associer à notre message.
    D'ailleurs le message Bus représente une approche de développement suivi par DDD (développement dirigé par d'amin) qui présente une architecture d'event sourcing ce qu'on appelle CQRS. L'une des architectures les plus recommandées qui résoudre énormément de problèmes de performance et de complexité algorithmique.

    <b>Worker</b>: Consomme les messages depuis les transports.
    @@ -56,7 +56,7 @@ Le composant bénéficie d’un panel sur la toolbar de debug, mais aussi d’un

    Ok on y va !! … Nous allons présenter maintenant comment utiliser le compossant `Messenger` de Symfony pour pouvoir mettre en place un système d'envoi de mail d'un facon asynchrone.

    Imganions si nous devons enovyer à 60000 utilisateurs un mail de notification, la page correspendante à notre route va continuer à charger tantque le boucle `for ($i = 1; $i <= 6000; $i++)` n'a pas terminé son parcours, et du coup ca va consommer énormement de mémoire et de plus ce n'est pas pratique ni supportable en terme de `User Experience`.
    Imganions si nous devons enovyer à 60000 utilisateurs un mail de notification, évidament la page correspendante à notre route va continuer à charger tantque le boucle `for ($i = 1; $i <= 6000; $i++)` n'a pas terminé son parcours, et du coup ca va consommer énormement de mémoire et de plus ce n'est pas pratique ni supportable en terme de `User Experience`.

    ### First step : La MISE en palce de l'environnement:

  19. ahmed-bhs revised this gist Oct 3, 2018. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -23,9 +23,9 @@ Le composant nous fournit aussi des fonctionnalités de routage pour intercepter

    ### Architecture
    <img src="https://i.imgur.com/3Edk085.png">
    Bref, notre nouveau composant est composé par(single responsabilité poo solid) :
    Le composant est composé par différent elements qui respecte le principe de single responsabilité (poo solid) :

    <b> Message </b>: Objet PHP qui doit être sérialisable qui reprèsente un DTO (Data transfer object).
    <b>Message </b>: Objet PHP qui doit être sérialisable qui reprèsente un DTO (Data transfer object).

    <b>Transporter</b>: Par défaut, les messages sont traités d'une manière <b>asynchrone</> dès leur distribution. <br>
    <b>Au cas où</b> nous préferons traiter les messages de manière asynchrone, vous devez configurer un transport. Ces transports ne communiquent avec notre application via des systèmes de file d'attente ce qu'on appelle brocker(RabbitMQ, Kafka, AWS, SQS, memcached et meme un base de données ou bien un système de fichier etc...)
  20. ahmed-bhs revised this gist Oct 3, 2018. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -7,7 +7,7 @@ Nous présentons aujourd'hui un petit retour d'expérience sur le composent Symf
    3. Fonctionnement de Symfony Messenger.
    4. Le couplage de Symfony Messenger et RabbitMQ, SQS, Redis...afin d'envoyer des emails d'une façon asynchrone.

    De nombreux de traitement web pourrait être assez lourd pris parfois beaucoup de temps parfois à cause trafique, à cause de l'architecture logicielle mise en place, à cause du gestion de mémoire de notre serveur, y a des gens qui préfèrent augmenter la mémoire ou bien mettre un système de `balance loader` ...<b>Mais</b> ca résout pas le problème principal.
    De nombreux de traitement web pourrait être assez lourd qui prennent parfois beaucoup de temps soit à cause d'un trafic intense,soit à cause d'une mauvaise architecture logicielle, soit à cause de la mauvaise gestion de mémoire, y a des gens qui préfèrent augmenter la mémoire ou bien mettre un système de `balance loader` ...<b>Mais</b> ca résout pas le problème principal.

    Bref, pour résoudre ce problème, on fait retour souvent à un mécanisme de file d'attente (ex: Standard Queue, FIFO Queue) pour effectuer des tâches chronophages et d’une manière ordonnancée et plus performante.
    ### Ordonnancement RabbitMQ
  21. ahmed-bhs revised this gist Oct 3, 2018. 1 changed file with 43 additions and 49 deletions.
    92 changes: 43 additions & 49 deletions gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -1,80 +1,75 @@
    # PRÉSENTATION GÉNÉRALE

    Nous présentons aujourd'hui un petit retour d'experience sur le composent Symfony Messenger. L'objectif derrière ce billet est de comprendre comment:
    Nous présentons aujourd'hui un petit retour d'expérience sur le composent Symfony Messenger. L'objectif derrière ce billet est de comprendre comment:

    1. Mettre en place une architecture de conteneur Docker qui repond à notre besoin.
    2. Fonctionnement de l'ordonnenacement de RabbitMQ.
    1. Mettre en place une architecture de conteneur Docker qui répond à notre besoin.
    2. Fonctionnement de l'ordonnancement avec RabbitMq.
    3. Fonctionnement de Symfony Messenger.
    4. Le couplage de Symfony Messenger et RabbitMQ pour envoyer des email d'une facon asynchrone.
    4. Le couplage de Symfony Messenger et RabbitMQ, SQS, Redis...afin d'envoyer des emails d'une façon asynchrone.

    De nombreux de traitement web pourrait être assez lourd pris parfois beaucoup de temps parfois à cause trafique, à cause de l'architecture logicielle mise en place, à cause du gestion de mémoire de notre serveur, y a des gens qui préfèrent augmenter la mémoire ou bien mettre un système de `balance loader` ...<b>Mais</b> ca résout pas le problème principal.

    De nombreux de traitement web pourait etre assez lourd à cause et prend parfois bcp de temps parfois à cause trafic, à cause de l'architecture logiciel mise en place, à cause du gestion de mémoire de notre serveur, ya des gens qui perfère augmenter la mpémoire ou bien mettre un système de `balance loader` mais ca résoud pas le problème à long terme et c'est payant .

    Bref, pour résoudre ce problème, on fait retour souvent à un mécanisme de file d'attente (ex: Standard Queue, FIFO Queue) pour effectuer des tâches chronophages et d’une manière ordoannacée et plus performante.

    Bref, pour résoudre ce problème, on fait retour souvent à un mécanisme de file d'attente (ex: Standard Queue, FIFO Queue) pour effectuer des tâches chronophages et d’une manière ordonnancée et plus performante.
    ### Ordonnancement RabbitMQ

    RabbitMQ est un système permettant de gérer des files de messages affin de permettre à
    différents clients de communiquer très simplement et plus efficassement. Pour que chaque client puisse communiquer
    avec RabbitMQ, celui-ci s’appuie sur le protocole AMQP. Ce protocole définit précisément la
    façon d’ordonnacement asynchronne des messages.
    C’est un gestionnaire de queues, permettant d’asynchroniser différents traitements. C’est
    pour assurer la haute disponibilité du serveur, dédié au d’exécution de traitements lourds comme
    l’envoi des e-mails, l’exportation, l'importation des fichiers et d'autres traitements durable.
    RabbitMQ est un système permettant de gérer des files de messages afin de permettre à différents clients de communiquer très simplement et plus efficacement. Pour que chaque client puisse communiquer avec Rabbit Mq, celui-ci s’appuie sur le protocole AMQP. Ce protocole définit précisément la façon d’ordonnancement asynchrone des messages.
    C’est un gestionnaire de queues, permettant d’à synchroniser différents traitements.
    C’est pour assurer la haute disponibilité du serveur, dédié aux d exécutions de traitements lourds comme l’envoi des e-mails, l’exportation, l'importation des fichiers et d'autres traitements durable.

    ### Le composant Messenger (disponible à partir la version symfony 4.1)

    Le composant messenger permet à l'application d'envoyer et de recevoir des messages vers / depuis d'autres applications ou via un système de queue basé sur un message bus. Un message bus est un composant très simple qui permet de dispatcher un objet (message). Le bus a pour rôle d’exécuter le handler approprié au message disant 'déspatché'. Durant ce processus le message va passer dans une pile ordonnée de notre middleware.
    Le composant messenger permet à l'application d'envoyer et de recevoir des messages vers / depuis d'autres applications ou via un système de queue basée sur un message bus. Un message bus est un composant très simple qui permet de dispatcher un objet (message). Le bus a pour rôle d’exécuter l'handler approprié au message disant "déspatché". Durant ce processus le message va passer dans une pile ordonnée de notre middleware.
    Le composant nous fournit aussi des fonctionnalités de routage pour intercepter les messages et les router vers le bon Transporter déjà défini au niveau de notre configuration au-dessous de`config.yml`.

    Le composant nous fournit aussi des fonctionnalités de routage pour intercepter les messages et les router vers le bon Transporter déja définit au niveau de notre configuration `config.yml`.
    ### Architecture
    <img src="https://i.imgur.com/3Edk085.png">
    Bref, notre nouveau composant est composé par(single responsabilité poo solid) :

    <b> Message </b>: Objet PHP qui doit être sérialisable. Data transfer object (DTO).
    <b> Message </b>: Objet PHP qui doit être sérialisable qui reprèsente un DTO (Data transfer object).

    <b>Transporter</b>: Par défaut, les messages sont traités dès leur distribution. Si vous préférez traiter les messages de manière asynchrone, vous devez configurer un transport. Ces transports communiquent avec notre application via des systèmes de file d'attente ce qu'on applleles brocker(RabbitMQ, Kafka, AWS SQS, etc.).
    <b>Transporter</b>: Par défaut, les messages sont traités d'une manière <b>asynchrone</> dès leur distribution. <br>
    <b>Au cas où</b> nous préferons traiter les messages de manière asynchrone, vous devez configurer un transport. Ces transports ne communiquent avec notre application via des systèmes de file d'attente ce qu'on appelle brocker(RabbitMQ, Kafka, AWS, SQS, memcached et meme un base de données ou bien un système de fichier etc...)

    <b>Message Handler </b>: La classe `NotificationHandler` qui recevra les messages. C’est ici qu’il pourra y avoir et executer la logique métier applicable aux messages.
    <b>Message Handler </b>: C’est ici qu’il pourra y avoir et exécuter le logique métier applicable aux messages. La classe `NotificationHandler` qui recevra les messages va représenter notre Handler.

    <b>Sender (Expéditeur) </b>:
    Responsable de la sérialisation et de l'envoi de messages à quelque chose . Cela peut être un courtier de messages ou une API tierce par exemple.
    Responsable de la sérialisation et de l'envoi de messages. Cela peut être un courtier de messages ou une API par exemple.

    <b>Receiver (Récepteur) :</b>
    Responsable de la désérialisation et de la transmission des messages aux gestionnaires. Cela peut être un extracteur de file d'attente de messages ou un point de terminaison d'API, par exemple.

    <b>Message Bus :</b> Définir le handler coresspondant associer à notre message. Le bus est utilisé pour envoyer des messages. Un message bus est un composant très simple qui permet de dispatcher un objet (message). Le bus a pour rôle d’exécuter le handler approprié au message, Le cœur du composant.

    D'ailleurs le Message Bus represente une approche de developpement suivit par DDD (developpement dérigé par doamin) qui présente une architecture d'event sourcing ce q'on appelle CQRS. L'un des architecture les plus recommendé qui résoudre énormement de problème de perfermance et de comlexité algorithmique.
    <b>Message Bus :</b> C'est le composant qui a pour role de <b>définir et exécuter le handler approprié au message</b> le handler coresspondant associer à notre message. Il permet de dispatcher notre message.

    D'ailleurs le message Bus représente une approche de développement suivi par DDD (développement dirigé par d'amin) qui présente une architecture d'event sourcing ce qu'on appelle CQRS. L'une des architectures les plus recommandées qui résoudre énormément de problèmes de performance et de complexité algorithmique.

    <b>Worker</b>: Consomme les messages depuis les transports.

    ------------------------------------------------------
    Pourquoi utiliser un transport? <br>
    <b>Tronspoter :</b> ils permettent de faire transiter les messages via différents logiciels (RabbitMQ, Kafka, Amazon SQS, etc.) 
    <b>Tronspoter :</b> Il permet de faire transiter les messages via différents brocker (ex: RabbitMQ, Kafka, Amazon SQS, etc.) 

    A la place d'envoyer notre message d'une manière synchrone directement vers notre Handler, on dérige le message vers un `transporter` pour le fournir d'une facon asynchrone à notre message Handler. C'est Cool !
    À la place d'envoyer notre message d'une manière synchrone directement vers notre handler, on dirige le message vers un `transporté` pour le fournir d'une façon asynchrone à notre message Handler. C'est cool !

    ------------------------------------------------------
    Le composant bénéficie d’un panel sur la toolbar de debug, mais aussi d’une commande afin de pouvoir consommer les messages à travers la commande suivante: ` bin/console messenger:consume-messages 'nom de Tronspoter(amqp, default)'`
    ###

    Ok on y va !! … Nous allons présenter comment utiliser le compossant `Messenger` de Symfony pour pouvoir mettre en place un système d'envoi de mail d'un facon asynchrone.
    Imganions si nous devons enovyer à 60000 utilisateurs un mail de notification, la page correspendante à notre route va continuer à charger tantque le boucle `for ($i = 1; $i <= 6000; $i++)` n'a pas terminé son parcours, et du coup ca va consommer énormement de mémoire et de plus ce n'est pas pratique ni supportable en terme d'`User Experience`.
    Ok on y va !! … Nous allons présenter maintenant comment utiliser le compossant `Messenger` de Symfony pour pouvoir mettre en place un système d'envoi de mail d'un facon asynchrone.

    Imganions si nous devons enovyer à 60000 utilisateurs un mail de notification, la page correspendante à notre route va continuer à charger tantque le boucle `for ($i = 1; $i <= 6000; $i++)` n'a pas terminé son parcours, et du coup ca va consommer énormement de mémoire et de plus ce n'est pas pratique ni supportable en terme de `User Experience`.

    ### First step : La MISE en palce de l'environnement:

    Pour se faire, nous avons deux choix soit d'installer notre environnement directement sur notre machine local soit utiliser un système de conteneur:<br>
    <b>La 1ere Méthode:</b>
    Pour se faire, nous avons deux choix :<br>
    <b>La 1ere Méthode: installer notre environnement directement sur notre machine local </b>
    ```
    rabbitmqctl
    1. Installer rabbitmq et lancer la commande rabbitmq-server
    2. rabbitmqctl status
    3. rabbitmq-plugins enable rabbitmq_management
    4. afin d'activer l'extension amqp. Il faudrait lancer 'apt install php-amqp' et ajouter 'extension = amqp.so' sous le fichier php.ini
    4. Activer l'extension amqp. : Il faudrait lancer 'apt install php-amqp' et ajouter 'extension = amqp.so' sous le fichier php.ini
    ```

    5.`composer create-project symfony/skeleton my-project` # c'est mieux de travailler avec le projet `symfony/skeleton` plus lègère avec le Minimum de dépenses possibles et installées à fur et aux mesures les composants nécessaires.
    5.`composer create-project symfony/skeleton my-project` # c'est mieux de travailler avec le projet `symfony/skeleton` plus légère avec le minimum de dépenses possibles et installer à fur et aux mesures les composants nécessaires.

    6. La mise en place des dépendences necessaires:
    ```
    @@ -86,7 +81,7 @@ composer req twig
    composer req web-server --dev
    ```

    <b>La 2eme Méthode:</b>
    <b>La 2eme Méthode: utiliser un système de conteneurs</b>
    On prépare notre `docker-compose.yml` pour regroupper les différents configurations:

    Voici mon docker-compose.yml:
    @@ -149,7 +144,7 @@ class SendNotification
    ```
    Voici notre controlleur:

    Nous allons utlisé notre `command Bus` pour dispatcher notre command, autrement dit notre message de type `SendNotification` pour que le Handler puisse sera notifier de cette action et répondre à travers le traitement necessaire.
    Nous allons utlisé notre `command Bus` pour dispatcher notre command, autrement dit notre message de type `SendNotification` pour que l'handler puisse sera notifié de cette action et répondre à travers le traitement nécessaire.
    ```
    namespace App\Controller;
    @@ -167,8 +162,8 @@ class HomeController extends AbstractController
    ...
    ```

    La création de notre Handler: (par convention faudrait que le nom de la callse soit 'nom de la classe de notre message'+Handler.
    Pour traiter un message il faudra créer un handler avec une méthode `__invoke` (si vous avez déjà une méthode, utilisez l’attribut handles dans le tag de définition du service.
    La création de notre Handler: (par convention faudrait que le nom de la callse soit 'nom de la classe de notre message'**+** Handler.
    Pour traiter un message il faudra créer un handler avec une méthode `__invoke`

    ```
    namespace App\MessageHandler;
    @@ -211,7 +206,7 @@ services:
    resource: '../src/MessageHandler'
    tags: [messenger.message_handler]
    ```
    On pourait aussi définir notre service avec le syntaxe complète afin de spécifier la méthode à appeler et le modèle supporté.
    On pourrait aussi définir notre service avec la syntaxe complète afin de spécifier la méthode à appeler et le modèle supporté.
    ```
    # config/services.yaml
    services:
    @@ -243,7 +238,7 @@ framework:
    Une fois que les messages ont été acheminés, nous pouvons les consommer avec la commande
    `$ bin/console messenger:consume-messages messenger.default_receiver`

    et s'intervient `Supervisor` pour executer la commande d'une facon automatique, faudrait prendre en consédiration que le lancememnt de service supervisor, arrète le service php-fpm, c'est pour cela que je viens d'indiquer au niveau de la configuration la relancememnt de php-fpm en cas d'arret.
    et s'intervient `Supervisor` pour exécuter la commande d'une façon automatique, faudrait prendre en considération que le lancement de service supervisor arrête le service `php-fpm`, c'est pour cela que nous devons au niveau de la configuration le relancement de php-fpm en cas d'arrêt.
    ### Supervisor

    ```
    @@ -280,16 +275,15 @@ swiftmailer:
    MAILER_URL=smtp://maildev:25
    ```

    Nous avons commenter le mail spool parceque nous utilisons déja un transporteur amqp pour enchainer l'envoi d'une facon asynchrone donc ya pas besoin de traiter le processus avec un système de spooling. (c'est la solution la plus rapide)
    (Nous avons commenter le mail spool parceque nous utilisons déja un transporteur amqp pour enchainer l'envoi d'une facon asynchrone donc ya pas besoin de traiter le processus avec un système de spooling.)

    Pour pouvoi utiliser d'autre transporteurs nous aloons installer `req enqueue/messenger-adapter` qui va nous fournir ce qu'on appelle un `adapter`
    ### Utilisation SQS(Simple Queue Service) Amazon
    tout d'abord faudrait creer le service à partir de SQS Managment Console et récupérer le nom la région et les clés d'authentification qui se trouvent sous l'interface IAM.
    Tout d'abord commencons par la création d'un service SQS à partir de SQS Managment Console et récupérer le nom la région et les clés d'authentification qui se trouvent sous l'interface IAM.

    Après il suffit d'installer les dépedences necessaires:
    `composer require messenger enqueue/messenger-adapter enqueue/sqs` pour pouvoir utiliser d'autres type de transports nous avons fait recours à ce package https://github.com/adtechpotok/enqueue-messenger-adapter
    `composer require messenger enqueue/messenger-adapter enqueue/sqs` pour pouvoir utiliser d'autres type de transports nous avons fait recours à ce package https://github.com/adtechpotok/enqueue-messenger-adapter qui va nous fournir différents adapteurs de plus.

    Voici les différents configurations necessaires :
    Voici les différentes configurations nécessaires:
    ```
    .env
    ENQUEUE_DSN=sqs:?secret=[AWSSecretKey]&key=[AWSAccessKey]region=[region]
    @@ -308,15 +302,15 @@ framework:
    'App\Message\SendNotification': sqs
    ```
    Afin de traiter le message, il suffit de lancer la commande:
    Afin de traiter les messages, il suffit de lancer la commande:
    `php bin/console messenger:consume sqs`

    Nous pouvons visualiser, lire le contnue, purger le queue à travers l'interface offert par AWS SQS:
    Nous pouvons visualiser, lire le continue des messages et purger la queue à travers l'interface offerte par AWS SQS:

    <img src="https://i.imgur.com/ZOmtW5Q.png">

    ### Utilisation de Redis
    pour les gens qui prèfère, on pourait faire les meme étapes avec memecached.
    Pour les gens qui prèfère `memcached`, on pourait suivre le meme démarche.
    `$ composer require enqueue/redis predis/predis:^1`

    ```
    @@ -325,8 +319,8 @@ ENQUEUE_DSN=redis://redis:6379
    ```


    On pourati connecter à notre CLI redis à travers un simple `docker-compose exec redis redis-cli`
    Après nous allons remarquer la création automatique d'une KLE de type list `messages`
    On pourrait connecter à notre CLI redit à travers une simple `docker compose exec redit redis-cli`
    Après nous allons remarquer la création automatique d'une CLE de type list `messages`.

    ```
    127.0.0.1:6379> KEYS *
  22. ahmed-bhs revised this gist Oct 3, 2018. 1 changed file with 3 additions and 0 deletions.
    3 changes: 3 additions & 0 deletions gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -337,3 +337,6 @@ Après nous allons remarquer la création automatique d'une KLE de type list `me

    Et finallement il suffit de lancer la commande: php bin/console messenger:consume redis pour pouvoir connsomer les différents messages.


    Je vous mettre ci dessous le lien du repo github pour notre exemple: https://github.com/ahmed-bhs/messenger-demo

  23. ahmed-bhs revised this gist Oct 3, 2018. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -27,7 +27,7 @@ l’envoi des e-mails, l’exportation, l'importation des fichiers et d'autres t
    Le composant messenger permet à l'application d'envoyer et de recevoir des messages vers / depuis d'autres applications ou via un système de queue basé sur un message bus. Un message bus est un composant très simple qui permet de dispatcher un objet (message). Le bus a pour rôle d’exécuter le handler approprié au message disant 'déspatché'. Durant ce processus le message va passer dans une pile ordonnée de notre middleware.

    Le composant nous fournit aussi des fonctionnalités de routage pour intercepter les messages et les router vers le bon Transporter déja définit au niveau de notre configuration `config.yml`.

    <img src="https://i.imgur.com/3Edk085.png">
    Bref, notre nouveau composant est composé par(single responsabilité poo solid) :

    <b> Message </b>: Objet PHP qui doit être sérialisable. Data transfer object (DTO).
  24. ahmed-bhs revised this gist Oct 3, 2018. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -65,7 +65,7 @@ Imganions si nous devons enovyer à 60000 utilisateurs un mail de notification,
    ### First step : La MISE en palce de l'environnement:

    Pour se faire, nous avons deux choix soit d'installer notre environnement directement sur notre machine local soit utiliser un système de conteneur:<br>
    La 1ere Méthode:
    <b>La 1ere Méthode:</b>
    ```
    rabbitmqctl
    1. Installer rabbitmq et lancer la commande rabbitmq-server
    @@ -86,7 +86,7 @@ composer req twig
    composer req web-server --dev
    ```

    La 2eme Méthode:
    <b>La 2eme Méthode:</b>
    On prépare notre `docker-compose.yml` pour regroupper les différents configurations:

    Voici mon docker-compose.yml:
  25. ahmed-bhs revised this gist Oct 3, 2018. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -335,5 +335,5 @@ Après nous allons remarquer la création automatique d'une KLE de type list `me

    `127.0.0.1:6379> lrange messages 0 -1 ` pour récupérer tout les messages saugardés.


    Et finallement il suffit de lancer la commande: php bin/console messenger:consume redis pour pouvoir connsomer les différents messages.

  26. ahmed-bhs revised this gist Oct 3, 2018. 1 changed file with 20 additions and 1 deletion.
    21 changes: 20 additions & 1 deletion gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -314,7 +314,26 @@ Afin de traiter le message, il suffit de lancer la commande:
    Nous pouvons visualiser, lire le contnue, purger le queue à travers l'interface offert par AWS SQS:

    <img src="https://i.imgur.com/ZOmtW5Q.png">
    ### Utilisation de MongoDB

    ### Utilisation de Redis
    pour les gens qui prèfère, on pourait faire les meme étapes avec memecached.
    `$ composer require enqueue/redis predis/predis:^1`

    ```
    #.env
    ENQUEUE_DSN=redis://redis:6379
    ```


    On pourati connecter à notre CLI redis à travers un simple `docker-compose exec redis redis-cli`
    Après nous allons remarquer la création automatique d'une KLE de type list `messages`

    ```
    127.0.0.1:6379> KEYS *
    1) "messages"
    ```

    `127.0.0.1:6379> lrange messages 0 -1 ` pour récupérer tout les messages saugardés.



  27. ahmed-bhs revised this gist Oct 3, 2018. 1 changed file with 3 additions and 0 deletions.
    3 changes: 3 additions & 0 deletions gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -311,6 +311,9 @@ framework:
    Afin de traiter le message, il suffit de lancer la commande:
    `php bin/console messenger:consume sqs`

    Nous pouvons visualiser, lire le contnue, purger le queue à travers l'interface offert par AWS SQS:

    <img src="https://i.imgur.com/ZOmtW5Q.png">
    ### Utilisation de MongoDB

    ### Utilisation de Redis
  28. ahmed-bhs revised this gist Oct 3, 2018. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -64,7 +64,7 @@ Imganions si nous devons enovyer à 60000 utilisateurs un mail de notification,

    ### First step : La MISE en palce de l'environnement:

    Pour se faire, nous avons deux choix soit d'installer notre environnement directement sur notre machine local soit utiliser un système de conteneur:
    Pour se faire, nous avons deux choix soit d'installer notre environnement directement sur notre machine local soit utiliser un système de conteneur:<br>
    La 1ere Méthode:
    ```
    rabbitmqctl
  29. ahmed-bhs revised this gist Oct 3, 2018. 1 changed file with 2 additions and 3 deletions.
    5 changes: 2 additions & 3 deletions gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -308,9 +308,8 @@ framework:
    'App\Message\SendNotification': sqs
    ```
    In order to process the message, we simply run the command

    php bin/console messenger:consume sqs
    Afin de traiter le message, il suffit de lancer la commande:
    `php bin/console messenger:consume sqs`

    ### Utilisation de MongoDB

  30. ahmed-bhs revised this gist Oct 3, 2018. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -292,7 +292,7 @@ Après il suffit d'installer les dépedences necessaires:
    Voici les différents configurations necessaires :
    ```
    .env
    ENQUEUE_DSN=sqs:?secret=[]&key=[]region=[region]
    ENQUEUE_DSN=sqs:?secret=[AWSSecretKey]&key=[AWSAccessKey]region=[region]
    ```

    messenger.yml