AsynchroneKommunikation mit derSymfony Messenger-KomponenteContao Konferenz 2023 Yanick Witschi@toflar
View Slide
Moin!
Unsere heutige Queue• Use Case• Was heisst asynchron?• Grundkonzepte Symfony Messenger• Integration in Contao• Use Case in Contao >= 5.1
Use Case
SynchronClient ServerPOST /zips/create📦
AsynchronClient ServerPOST /zips/create📦GET /zips/42{"id":42,"status":"pending"}{"id":42,"status":"ready"}Queue Worker
Message Brokers
Symfony MessengerGrundkonzepte
Message
Transports
Transports• AMQP (Advanced Message Queuing Protocol)• Apache Qpid, Apache ActiveMQ, RabbitMQ• Doctrine• Beanstalkd• Redis (Redis Streams)• Amazon SQS• Synchronized (SyncTransport)• …• AmqpSender• AmqpReceiver• DoctrineSender• DoctrineReceiver[…]
Transports - Serialisierung• PHP Serialization (Standard)• JSON• XML• CSV• YAML• Dein Format
Transports - Config
MessageBus
Routing
MessageHandler
Consumer/Worker
messenger:consume
Done !
Messenger ist so viel mehr• Message Envelopes & Stamps• Message Events (Subscribers / Listeners)• Middlewares• Failure Transport
Integration in ContaoVersion >= 5.1
Herausforderung
Cronjobs !* * * * *
Cronjob-Framework
Ziele 🎯• Jede Minute startet ein messenger:consume Command,der für eine Minute läuft. Dieser Cronjob darf die anderenCronjobs nicht blockieren.• Fallback auf synchrone Ausführung, wenn das Cronjob-Framework nicht läuft.• Routing automatisieren, so dass nicht jede Extension dieeigene Message routen muss.• Bonus? Autoscaling wenn viele Jobs auf der Queue sind.
Ziel #1Nicht-blockierende Worker
⚠
✅
Ziel #2Automatischer Fallback
Ziel #3Routing automatisieren
Interfaces FTW !
Ziel #4Autoscaling
Use Casein Contao >= 5.1
Grundkonfiguration• Contao Cronjob-Framework aktivieren• ZipService bleibt gleich• CreateAsyncZipMessageHandler bleibt gleich
Contao nutzt das bereits!
Contao Docshttps://docs.contao.org/dev/framework/async-messaging/
Contao 5.3 LTS💡Reminder
Kontakt• Fediverse: phpc.social/@toflar• Twitter/X: @toflar• GitHub: toflar• E-Mail: [email protected]• Slack