$30 off During Our Annual Pro Sale. View Details »

Asynchrone Kommunikation mit der Symfony Messenger-Komponente

Asynchrone Kommunikation mit der Symfony Messenger-Komponente

Yanick Witschi

October 23, 2023
Tweet

More Decks by Yanick Witschi

Other Decks in Technology

Transcript

  1. Asynchrone
    Kommunikation mit der
    Symfony Messenger-
    Komponente
    Contao Konferenz 2023

    Yanick Witschi

    @to
    fl
    ar

    View Slide

  2. Moin!

    View Slide

  3. Unsere heutige Queue
    • Use Case

    • Was heisst asynchron?

    • Grundkonzepte Symfony Messenger

    • Integration in Contao

    • Use Case in Contao >= 5.1

    View Slide

  4. Use Case

    View Slide

  5. Synchron
    Client Server
    POST /zips/create
    📦

    View Slide

  6. Asynchron
    Client Server
    POST /zips/create
    📦
    GET /zips/42
    {"id":42,"status":"pending"}
    {"id":42,"status":"ready"}
    Queue Worker

    View Slide

  7. Message Brokers

    View Slide

  8. Symfony Messenger
    Grundkonzepte

    View Slide

  9. Message

    View Slide

  10. Message

    View Slide

  11. Transports

    View Slide

  12. Transports
    • AMQP (Advanced Message Queuing Protocol)

    • Apache Qpid, Apache ActiveMQ, RabbitMQ

    • Doctrine

    • Beanstalkd

    • Redis (Redis Streams)

    • Amazon SQS

    • Synchronized (SyncTransport)

    • …
    • AmqpSender

    • AmqpReceiver

    • DoctrineSender

    • DoctrineReceiver

    […]

    View Slide

  13. Transports - Serialisierung
    • PHP Serialization (Standard)

    • JSON

    • XML

    • CSV

    • YAML

    • Dein Format

    View Slide

  14. Transports - Con
    fi
    g

    View Slide

  15. MessageBus

    View Slide

  16. MessageBus

    View Slide

  17. MessageBus

    View Slide

  18. Routing

    View Slide

  19. Routing

    View Slide

  20. Routing

    View Slide

  21. MessageHandler

    View Slide

  22. MessageHandler

    View Slide

  23. Consumer/Worker

    View Slide

  24. messenger:consume

    View Slide

  25. messenger:consume

    View Slide

  26. Done !

    View Slide

  27. Messenger ist so viel mehr
    • Message Envelopes & Stamps

    • Message Events (Subscribers / Listeners)

    • Middlewares

    • Failure Transport

    View Slide

  28. Integration in Contao
    Version >= 5.1

    View Slide

  29. Herausforderung

    View Slide

  30. Cronjobs !
    * * * * *

    View Slide

  31. Cronjob-Framework

    View Slide

  32. Ziele 🎯
    • Jede Minute startet ein messenger:consume Command,
    der für eine Minute läuft. Dieser Cronjob darf die anderen
    Cronjobs nicht blockieren.

    • Fallback auf synchrone Ausführung, wenn das Cronjob-
    Framework nicht läuft.

    • Routing automatisieren, so dass nicht jede Extension die
    eigene Message routen muss.

    • Bonus? Autoscaling wenn viele Jobs auf der Queue sind.

    View Slide

  33. Ziel #1
    Nicht-blockierende Worker

    View Slide


  34. View Slide

  35. View Slide


  36. View Slide

  37. View Slide

  38. Ziel #2
    Automatischer Fallback

    View Slide

  39. View Slide

  40. View Slide

  41. Ziel #3
    Routing automatisieren

    View Slide

  42. Interfaces FTW !

    View Slide

  43. Ziel #4
    Autoscaling

    View Slide

  44. View Slide

  45. Use Case
    in Contao >= 5.1

    View Slide

  46. Grundkon
    fi
    guration
    • Contao Cronjob-Framework aktivieren

    • ZipService bleibt gleich


    • CreateAsyncZipMessageHandler bleibt gleich

    View Slide

  47. Message

    View Slide

  48. View Slide

  49. Contao nutzt das bereits!

    View Slide

  50. Contao Docs
    https://docs.contao.org/dev/framework/async-messaging/

    View Slide

  51. Contao 5.3 LTS
    💡Reminder

    View Slide

  52. Kontakt
    • Fediverse: phpc.social/@to
    fl
    ar

    • Twitter/X: @to
    fl
    ar

    • GitHub: to
    fl
    ar

    • E-Mail: [email protected]

    • Slack

    View Slide