SlideShare a Scribd company logo
Working with
Asynchronous Events
Jan Gregor Emge-Triebel (@jan0707)
Dennis Oehme (@dennisoehme)
Garden of Concepts GmbH
● Hanau / Munich
● In house CMS “.stone”
● In house CRM “Elvis”
● Various individual customer projects
● Symfony based development, supported by:
○ MongoDB, ElasticSearch, MySQL, RabbitMQ,
Redis, AngularJS, Twig, Jade, Gitlab, Docker,
Vagrant, Ansible
● Say hi @goc_mediastudio
Requests == Event
“Symfony is a request based
framework.”
Fabien Potencier, Symfony Live 2014
@fabpot
Requests
Request Controller Logic 1 Logic 2 Response
Request Controller
Logic 1
Logic 2
Response
Synchronous
Asynchronous
Why do we need asynchronous event processing ?
● Move long running logic
● Cut down reaction times
● Transfer load
● Microservices
● Exchange data/messages with other (sub-)systems
● Parallelization
● Scaling
Our journey
● Gearman
● (PHP) Resque
○ Demo
● RabbitMQ
Gearman
● Gearman Job Server (written in C)
● Runs as a Linux daemon
● Requires PECL extension for worker API
● Worker APIs exists for other Languages (C, Perl,...)
Gearman
http://gearman.org/examples/send-emails/
Gearman
● Latest PECL-Extension version is 1.1.2 (August 2013)
● Latest Server-Release (spring 2014)
● No more process is being made
● Gearman daemon and extension are often incompatible
(PHP) Resque
● Is a Resque port to php:
○ Resque is a Redis-backed Ruby library for creating background jobs, placing them on multiple
queues, and processing them later.
● Needs Redis(-Cluster)
● Redis is capable of atomic transactions (FIFO)
Demo
https://github.com/Jan0707/async-symfony
(PHP) Resque
● Hardly any commits since 2012
● Last commit to Master on 2015-05-12
● chrisboulton/php-resque & michelsalib/BCCResqueBundle must be presumed
dead ?
RabbitMQ
Or why this talk should be named:
“Working with Asynchronous Events in RabbitMQ”
RabbitMQ
● Message Broker written in Erlang
● AMQP (Advanced Message Queuing Protocol)
● Open, but binary network protocoll
● Routing, message distribution
● Transactions
● Plus, more nice features
○ TTL
○ DLX (Dead Letter eXchange)
○ PreFetching
Of publishers and consumers ...
Publisher Publish Consumer
Ex-
change
QueueRoutes Consumes
There is a Bundle for it
● https://github.com/php-amqplib/RabbitMqBundle
● Consumer and Producer as Symfony services
● Every queue Consumer runs as a Symfony command
● Configuration via app/config.yml
○ Better: Create app/config/rabbitmq.yml and import in app/config/config.yml
app/config/rabbitmq.yml
Symfony Producer
Symfony Consumer
Lessons Learned: Consumer
● PHP threads are not meant to be long running
○ New problems: memory leaks, ...
● Use supervisor to check and restart Consumers
● Open database connections, timeouts
○ Better quit when inactive
● Cap maximum runtime per thread
○ Automatically shutdown after processign x messages
● Memory limit: RabbitMQ-Bundle utilizes “soft-quota”
● Booting consumers takes rather long
● Prefetching (Warning: Order!)
Lessons Learned: Message
● Compact/short messages
● Queues eat up a lot of storage / RAM
● Common format such as JSON or XML
○ Do not serialize PHP objects or arrays
○ Ensure interoperability with other systems and languages
Lessons Learned: Message Transformation
● Use JMS/Serializer to convert objects to JSON
○ Deserialize JSON to PHP objects in consumer
○ Objects can and should be validated (with symfony forms and asserts)
○ Reload entities / documents to keep them up to date (doctrine/unit of work)
● Alternative approach: PHPs JsonSerializable Interface
Lessons Learned: Message Header
● Use message “Header” for content-type and version
○ Message formats can change
○ consumers must remain compatible
● Unqiue IDs make logging / debugging / live easier
● Other meta data:
○ timestamp
○ user / session
○ App id
○ ...
Tip: Custom Consumer-/Producer-Classes
● Message transformation
● Events
● Logging
Transactions
● Messages must be brokered to exactly one Consumer
● Consumer must explicitly answer a message with “acknowledge”
● If not, the message will be marked “rejected” and be requeued
○ Beware of requeuing:
■ Can lead to toxic messages
■ Can change the order of messages
○ Beware of final rejection:
■ Can lead to loss of data
Toxic Messages
● If a message is not explicitly being answered, it will be requeued.
● If that happens multiple times :
● Congratulations on your infinite loop
● Congratulations on your infinite loop
● Congratulations on your infinite loop
● Congratulations on your infinite loop
● Congratulations on your infinite loop
● Congratulations on your infinite loop
● Congratulations on your infinite loop
Dead Letter Exchange
● RabbitMQ comes with a Dead Letter Exchange (DLX)
● Every queue determines its own or shared DLX
● DLX is a separate queue, storing all rejected messages
○ (Reject, TTL, Prefetch)
app/config/rabbitmq.yml
Signal Handling
● Graceful Shutdown
● pcntl_signal / _dispatch
● SIGTERM
● FATAL ERROR abfangen
● Logging
● Toxic Message-Handling
Shutdown
Deployment
● Consumers need an up to date code base
● Consumers need a graceful shutdown
● Consumers must only be shutdown when idling
○ Otherwise : Loss of message / data
Other challenges
● Significant change of infrastructure
○ Choose your libraries and dependencies carefully!
● Moving load is not removing load
● Rethinking necessary
○ Display of status / intermediate result
○ Websockets or Push instead of Polling
● Interdependencies of messages
○ Especially when running parallel consumers!
● Performance (Doctrine ORM / ODM)
Questions ?
Thank you :)
Find this and other talks at: https://www.gardenofconcepts.
com/talks/
Feedback is always welcome
& please rate our talk !

More Related Content

What's hot (20)

PPTX
VXCON 2017
Kelvin Chan
 
ODP
Event Driven with LibUV and ZeroMQ
Luke Luo
 
PDF
ZeroMQ with NodeJS
Fernando Sanabria
 
ODP
Rust Primer
Knoldus Inc.
 
PPTX
Rabbit MQ
Tran Thanh Thi
 
PDF
Practical SystemTAP basics: Perl memory profiling
Lubomir Rintel
 
PDF
WebAssembly: A New World of Native Exploits on the Browser
Priyanka Aash
 
PDF
Rust Is Safe. But Is It Fast?
ScyllaDB
 
PPT
Leveraging zeromq for node.js
Ruben Tan
 
PDF
2013 - Brian Stanley - Memcached, Cached all the things
PHP Conference Argentina
 
ODP
Overview of ZeroMQ
pieterh
 
KEY
Distributed app development with nodejs and zeromq
Ruben Tan
 
KEY
Europycon2011: Implementing distributed application using ZeroMQ
fcrippa
 
PDF
Let's Talk Locks!
C4Media
 
PDF
The art of concurrent programming
Iskren Chernev
 
PPTX
Tomas Urbonaitis "Introduction to asynchronous persistent messaging with NSer...
.NET Crowd
 
PDF
PostgreSQL: present and near future
NaN-tic
 
PDF
Vagrantfordevops
Deepanshu Gajbhiye
 
PDF
ZeroMQ - Sockets on steroids!
Pedro Januário
 
PDF
Kernel Recipes 2016 - kernelci.org: 1.5 million kernel boots (and counting)
Anne Nicolas
 
VXCON 2017
Kelvin Chan
 
Event Driven with LibUV and ZeroMQ
Luke Luo
 
ZeroMQ with NodeJS
Fernando Sanabria
 
Rust Primer
Knoldus Inc.
 
Rabbit MQ
Tran Thanh Thi
 
Practical SystemTAP basics: Perl memory profiling
Lubomir Rintel
 
WebAssembly: A New World of Native Exploits on the Browser
Priyanka Aash
 
Rust Is Safe. But Is It Fast?
ScyllaDB
 
Leveraging zeromq for node.js
Ruben Tan
 
2013 - Brian Stanley - Memcached, Cached all the things
PHP Conference Argentina
 
Overview of ZeroMQ
pieterh
 
Distributed app development with nodejs and zeromq
Ruben Tan
 
Europycon2011: Implementing distributed application using ZeroMQ
fcrippa
 
Let's Talk Locks!
C4Media
 
The art of concurrent programming
Iskren Chernev
 
Tomas Urbonaitis "Introduction to asynchronous persistent messaging with NSer...
.NET Crowd
 
PostgreSQL: present and near future
NaN-tic
 
Vagrantfordevops
Deepanshu Gajbhiye
 
ZeroMQ - Sockets on steroids!
Pedro Januário
 
Kernel Recipes 2016 - kernelci.org: 1.5 million kernel boots (and counting)
Anne Nicolas
 

Viewers also liked (20)

KEY
Telephony with OpenShift Twilio and MongoDB
Mark Atwood
 
PDF
Juc boston2014.pptx
Brandon Mueller
 
PDF
Theres a rabbit on my symfony
Alvaro Videla
 
PDF
Asynchronous processing with PHP and Symfony2. Do it simple
Kirill Chebunin
 
PDF
Scaling applications with RabbitMQ at SunshinePHP
Alvaro Videla
 
PPT
Service Oriented Architecture for Distributed Identity Management System
adameq
 
PDF
Laravel - 系統全攻略
Vincent Chi
 
PDF
Scaling Symfony2 apps with RabbitMQ - Symfony UK Meetup
Kacper Gunia
 
PDF
PHP is the King, nodejs the prince and python the fool
Alessandro Cinelli (cirpo)
 
PDF
Interoperability With RabbitMq
Alvaro Videla
 
PDF
PHP也有day #27 - From apprentice to artisan 解耦合處理程序及單元測試
亮亮 閃
 
PDF
Laravel - 系統全攻略(續)
Vincent Chi
 
PDF
Tips and Tricks for your Service Oriented Architecture @ CakeFest 2013 in San...
Alessandro Nadalin
 
PPTX
RESTful API的设计与开发
Ace Lee
 
PDF
PHPSpec - the only Design Tool you need - 4Developers
Kacper Gunia
 
PDF
Services Oriented Architecture with PHP and MySQL
Joe Stump
 
PDF
Enterprise PHP Architecture through Design Patterns and Modularization (Midwe...
Aaron Saray
 
PDF
Speed up your Symfony2 application and build awesome features with Redis
Ricard Clau
 
PDF
KSDG BaaS Intro
ericpi Bi
 
PPTX
Write microservice in golang
Bo-Yi Wu
 
Telephony with OpenShift Twilio and MongoDB
Mark Atwood
 
Juc boston2014.pptx
Brandon Mueller
 
Theres a rabbit on my symfony
Alvaro Videla
 
Asynchronous processing with PHP and Symfony2. Do it simple
Kirill Chebunin
 
Scaling applications with RabbitMQ at SunshinePHP
Alvaro Videla
 
Service Oriented Architecture for Distributed Identity Management System
adameq
 
Laravel - 系統全攻略
Vincent Chi
 
Scaling Symfony2 apps with RabbitMQ - Symfony UK Meetup
Kacper Gunia
 
PHP is the King, nodejs the prince and python the fool
Alessandro Cinelli (cirpo)
 
Interoperability With RabbitMq
Alvaro Videla
 
PHP也有day #27 - From apprentice to artisan 解耦合處理程序及單元測試
亮亮 閃
 
Laravel - 系統全攻略(續)
Vincent Chi
 
Tips and Tricks for your Service Oriented Architecture @ CakeFest 2013 in San...
Alessandro Nadalin
 
RESTful API的设计与开发
Ace Lee
 
PHPSpec - the only Design Tool you need - 4Developers
Kacper Gunia
 
Services Oriented Architecture with PHP and MySQL
Joe Stump
 
Enterprise PHP Architecture through Design Patterns and Modularization (Midwe...
Aaron Saray
 
Speed up your Symfony2 application and build awesome features with Redis
Ricard Clau
 
KSDG BaaS Intro
ericpi Bi
 
Write microservice in golang
Bo-Yi Wu
 
Ad

Similar to Working with Asynchronous Events (20)

PDF
PHP at Density and Scale (Lone Star PHP 2014)
David Timothy Strauss
 
PDF
WebCamp 2016: Python. Вячеслав Каковский: Real-time мессенджер на Python. Осо...
WebCamp
 
PDF
AMQP with RabbitMQ
Spyros Papageorgiou
 
PDF
MuleSoft Surat Virtual Meetup#33 - Unleash the power of Anypoint MQ and DLQ
Jitendra Bafna
 
PDF
Enlightenment as Standalone Wayland Compositor
Samsung Open Source Group
 
PDF
WebCamp Ukraine 2016: Instant messenger with Python. Back-end development
Viach Kakovskyi
 
PDF
What we've learned from running thousands of production RabbitMQ clusters - L...
RabbitMQ Summit
 
PDF
Leveraging Android's Linux Heritage
Opersys inc.
 
PDF
Leveraging Android's Linux Heritage at ELC-E 2011
Opersys inc.
 
PDF
Server fleet management using Camunda by Akhil Ahuja
camunda services GmbH
 
PDF
Play Framework
Eduard Tudenhoefner
 
ODP
Turbo charge your logs
Jeremy Cook
 
PPTX
Patna_Meetup_MQ
Om Prakash
 
PPTX
Efficient Buffer Management
basisspace
 
PDF
10 Things Every Developer Using RabbitMQ Should Know
VMware Tanzu
 
PDF
Netty training
Jackson dos Santos Olveira
 
PDF
Zing Me Real Time Web Chat Architect
Chau Thanh
 
PDF
Task migration using CRIU
Rohit Jnagal
 
PDF
The Beam Vision for Portability: "Write once run anywhere"
Knoldus Inc.
 
PDF
Event driven architectures with Kinesis
Mark Harrison
 
PHP at Density and Scale (Lone Star PHP 2014)
David Timothy Strauss
 
WebCamp 2016: Python. Вячеслав Каковский: Real-time мессенджер на Python. Осо...
WebCamp
 
AMQP with RabbitMQ
Spyros Papageorgiou
 
MuleSoft Surat Virtual Meetup#33 - Unleash the power of Anypoint MQ and DLQ
Jitendra Bafna
 
Enlightenment as Standalone Wayland Compositor
Samsung Open Source Group
 
WebCamp Ukraine 2016: Instant messenger with Python. Back-end development
Viach Kakovskyi
 
What we've learned from running thousands of production RabbitMQ clusters - L...
RabbitMQ Summit
 
Leveraging Android's Linux Heritage
Opersys inc.
 
Leveraging Android's Linux Heritage at ELC-E 2011
Opersys inc.
 
Server fleet management using Camunda by Akhil Ahuja
camunda services GmbH
 
Play Framework
Eduard Tudenhoefner
 
Turbo charge your logs
Jeremy Cook
 
Patna_Meetup_MQ
Om Prakash
 
Efficient Buffer Management
basisspace
 
10 Things Every Developer Using RabbitMQ Should Know
VMware Tanzu
 
Zing Me Real Time Web Chat Architect
Chau Thanh
 
Task migration using CRIU
Rohit Jnagal
 
The Beam Vision for Portability: "Write once run anywhere"
Knoldus Inc.
 
Event driven architectures with Kinesis
Mark Harrison
 
Ad

Recently uploaded (20)

PDF
Odoo CRM vs Zoho CRM: Honest Comparison 2025
Odiware Technologies Private Limited
 
PDF
Technical-Careers-Roadmap-in-Software-Market.pdf
Hussein Ali
 
PDF
IObit Driver Booster Pro 12.4.0.585 Crack Free Download
henryc1122g
 
PPTX
OpenChain @ OSS NA - In From the Cold: Open Source as Part of Mainstream Soft...
Shane Coughlan
 
PPTX
Agentic Automation: Build & Deploy Your First UiPath Agent
klpathrudu
 
PDF
Wondershare PDFelement Pro Crack for MacOS New Version Latest 2025
bashirkhan333g
 
PDF
Open Chain Q2 Steering Committee Meeting - 2025-06-25
Shane Coughlan
 
PPTX
Help for Correlations in IBM SPSS Statistics.pptx
Version 1 Analytics
 
PPTX
Hardware(Central Processing Unit ) CU and ALU
RizwanaKalsoom2
 
PDF
Generic or Specific? Making sensible software design decisions
Bert Jan Schrijver
 
PPTX
Finding Your License Details in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PDF
4K Video Downloader Plus Pro Crack for MacOS New Download 2025
bashirkhan333g
 
PDF
Automate Cybersecurity Tasks with Python
VICTOR MAESTRE RAMIREZ
 
PDF
SAP Firmaya İade ABAB Kodları - ABAB ile yazılmıl hazır kod örneği
Salih Küçük
 
PDF
MiniTool Partition Wizard Free Crack + Full Free Download 2025
bashirkhan333g
 
PDF
IDM Crack with Internet Download Manager 6.42 Build 43 with Patch Latest 2025
bashirkhan333g
 
PDF
Digger Solo: Semantic search and maps for your local files
seanpedersen96
 
PDF
MiniTool Partition Wizard 12.8 Crack License Key LATEST
hashhshs786
 
PDF
AI + DevOps = Smart Automation with devseccops.ai.pdf
Devseccops.ai
 
PPTX
Agentic Automation Journey Series Day 2 – Prompt Engineering for UiPath Agents
klpathrudu
 
Odoo CRM vs Zoho CRM: Honest Comparison 2025
Odiware Technologies Private Limited
 
Technical-Careers-Roadmap-in-Software-Market.pdf
Hussein Ali
 
IObit Driver Booster Pro 12.4.0.585 Crack Free Download
henryc1122g
 
OpenChain @ OSS NA - In From the Cold: Open Source as Part of Mainstream Soft...
Shane Coughlan
 
Agentic Automation: Build & Deploy Your First UiPath Agent
klpathrudu
 
Wondershare PDFelement Pro Crack for MacOS New Version Latest 2025
bashirkhan333g
 
Open Chain Q2 Steering Committee Meeting - 2025-06-25
Shane Coughlan
 
Help for Correlations in IBM SPSS Statistics.pptx
Version 1 Analytics
 
Hardware(Central Processing Unit ) CU and ALU
RizwanaKalsoom2
 
Generic or Specific? Making sensible software design decisions
Bert Jan Schrijver
 
Finding Your License Details in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
4K Video Downloader Plus Pro Crack for MacOS New Download 2025
bashirkhan333g
 
Automate Cybersecurity Tasks with Python
VICTOR MAESTRE RAMIREZ
 
SAP Firmaya İade ABAB Kodları - ABAB ile yazılmıl hazır kod örneği
Salih Küçük
 
MiniTool Partition Wizard Free Crack + Full Free Download 2025
bashirkhan333g
 
IDM Crack with Internet Download Manager 6.42 Build 43 with Patch Latest 2025
bashirkhan333g
 
Digger Solo: Semantic search and maps for your local files
seanpedersen96
 
MiniTool Partition Wizard 12.8 Crack License Key LATEST
hashhshs786
 
AI + DevOps = Smart Automation with devseccops.ai.pdf
Devseccops.ai
 
Agentic Automation Journey Series Day 2 – Prompt Engineering for UiPath Agents
klpathrudu
 

Working with Asynchronous Events

  • 1. Working with Asynchronous Events Jan Gregor Emge-Triebel (@jan0707) Dennis Oehme (@dennisoehme)
  • 2. Garden of Concepts GmbH ● Hanau / Munich ● In house CMS “.stone” ● In house CRM “Elvis” ● Various individual customer projects ● Symfony based development, supported by: ○ MongoDB, ElasticSearch, MySQL, RabbitMQ, Redis, AngularJS, Twig, Jade, Gitlab, Docker, Vagrant, Ansible ● Say hi @goc_mediastudio
  • 3. Requests == Event “Symfony is a request based framework.” Fabien Potencier, Symfony Live 2014 @fabpot
  • 4. Requests Request Controller Logic 1 Logic 2 Response Request Controller Logic 1 Logic 2 Response Synchronous Asynchronous
  • 5. Why do we need asynchronous event processing ? ● Move long running logic ● Cut down reaction times ● Transfer load ● Microservices ● Exchange data/messages with other (sub-)systems ● Parallelization ● Scaling
  • 6. Our journey ● Gearman ● (PHP) Resque ○ Demo ● RabbitMQ
  • 7. Gearman ● Gearman Job Server (written in C) ● Runs as a Linux daemon ● Requires PECL extension for worker API ● Worker APIs exists for other Languages (C, Perl,...)
  • 9. Gearman ● Latest PECL-Extension version is 1.1.2 (August 2013) ● Latest Server-Release (spring 2014) ● No more process is being made ● Gearman daemon and extension are often incompatible
  • 10. (PHP) Resque ● Is a Resque port to php: ○ Resque is a Redis-backed Ruby library for creating background jobs, placing them on multiple queues, and processing them later. ● Needs Redis(-Cluster) ● Redis is capable of atomic transactions (FIFO)
  • 12. (PHP) Resque ● Hardly any commits since 2012 ● Last commit to Master on 2015-05-12 ● chrisboulton/php-resque & michelsalib/BCCResqueBundle must be presumed dead ?
  • 13. RabbitMQ Or why this talk should be named: “Working with Asynchronous Events in RabbitMQ”
  • 14. RabbitMQ ● Message Broker written in Erlang ● AMQP (Advanced Message Queuing Protocol) ● Open, but binary network protocoll ● Routing, message distribution ● Transactions ● Plus, more nice features ○ TTL ○ DLX (Dead Letter eXchange) ○ PreFetching
  • 15. Of publishers and consumers ... Publisher Publish Consumer Ex- change QueueRoutes Consumes
  • 16. There is a Bundle for it ● https://github.com/php-amqplib/RabbitMqBundle ● Consumer and Producer as Symfony services ● Every queue Consumer runs as a Symfony command ● Configuration via app/config.yml ○ Better: Create app/config/rabbitmq.yml and import in app/config/config.yml
  • 20. Lessons Learned: Consumer ● PHP threads are not meant to be long running ○ New problems: memory leaks, ... ● Use supervisor to check and restart Consumers ● Open database connections, timeouts ○ Better quit when inactive ● Cap maximum runtime per thread ○ Automatically shutdown after processign x messages ● Memory limit: RabbitMQ-Bundle utilizes “soft-quota” ● Booting consumers takes rather long ● Prefetching (Warning: Order!)
  • 21. Lessons Learned: Message ● Compact/short messages ● Queues eat up a lot of storage / RAM ● Common format such as JSON or XML ○ Do not serialize PHP objects or arrays ○ Ensure interoperability with other systems and languages
  • 22. Lessons Learned: Message Transformation ● Use JMS/Serializer to convert objects to JSON ○ Deserialize JSON to PHP objects in consumer ○ Objects can and should be validated (with symfony forms and asserts) ○ Reload entities / documents to keep them up to date (doctrine/unit of work) ● Alternative approach: PHPs JsonSerializable Interface
  • 23. Lessons Learned: Message Header ● Use message “Header” for content-type and version ○ Message formats can change ○ consumers must remain compatible ● Unqiue IDs make logging / debugging / live easier ● Other meta data: ○ timestamp ○ user / session ○ App id ○ ...
  • 24. Tip: Custom Consumer-/Producer-Classes ● Message transformation ● Events ● Logging
  • 25. Transactions ● Messages must be brokered to exactly one Consumer ● Consumer must explicitly answer a message with “acknowledge” ● If not, the message will be marked “rejected” and be requeued ○ Beware of requeuing: ■ Can lead to toxic messages ■ Can change the order of messages ○ Beware of final rejection: ■ Can lead to loss of data
  • 26. Toxic Messages ● If a message is not explicitly being answered, it will be requeued. ● If that happens multiple times : ● Congratulations on your infinite loop ● Congratulations on your infinite loop ● Congratulations on your infinite loop ● Congratulations on your infinite loop ● Congratulations on your infinite loop ● Congratulations on your infinite loop ● Congratulations on your infinite loop
  • 27. Dead Letter Exchange ● RabbitMQ comes with a Dead Letter Exchange (DLX) ● Every queue determines its own or shared DLX ● DLX is a separate queue, storing all rejected messages ○ (Reject, TTL, Prefetch)
  • 29. Signal Handling ● Graceful Shutdown ● pcntl_signal / _dispatch ● SIGTERM ● FATAL ERROR abfangen ● Logging ● Toxic Message-Handling Shutdown
  • 30. Deployment ● Consumers need an up to date code base ● Consumers need a graceful shutdown ● Consumers must only be shutdown when idling ○ Otherwise : Loss of message / data
  • 31. Other challenges ● Significant change of infrastructure ○ Choose your libraries and dependencies carefully! ● Moving load is not removing load ● Rethinking necessary ○ Display of status / intermediate result ○ Websockets or Push instead of Polling ● Interdependencies of messages ○ Especially when running parallel consumers! ● Performance (Doctrine ORM / ODM)
  • 32. Questions ? Thank you :) Find this and other talks at: https://www.gardenofconcepts. com/talks/ Feedback is always welcome & please rate our talk !