Magento 2 Events, Observers, Cron & Message Queues
Before writing code
Fetch live docs:
- Fetch
https://developer.adobe.com/commerce/php/development/components/events-and-observers/for events/observers guide - Web-search
site:developer.adobe.com commerce php development components message-queuesfor message queue guide - Web-search
site:developer.adobe.com commerce php development components cronfor cron development
Events and Observers
How Events Work
Publish-subscribe pattern: code dispatches named events, and observers respond.
Dispatching Events
$this->eventManager->dispatch('event_name', ['key' => $value]);
EventManagerInterface is injected via constructor.
Observer Configuration (events.xml)
Observers are bound to events in etc/events.xml (global), etc/frontend/events.xml, or etc/adminhtml/events.xml:
event name— event to observeobserver name— unique identifierinstance— observer class (fully qualified)
Observer Classes
- Located in
Observer/directory - Implement
Magento\Framework\Event\ObserverInterface - Single method:
execute(Observer $observer)— access event data via$observer->getEvent()
Area Scoping
etc/events.xml— runs in ALL areasetc/frontend/events.xml— storefront onlyetc/adminhtml/events.xml— admin only- Use the most specific scope to avoid unintended side effects
Common Events
Magento dispatches hundreds of events. Common categories:
catalog_product_save_before/after— product save lifecyclecheckout_submit_all_after— order placementcustomer_register_success— customer registrationsales_order_place_after— order placedcontroller_action_predispatch/postdispatch— request lifecycle
Cron Jobs
Configuration (crontab.xml)
Cron jobs are declared in etc/crontab.xml:
job name— unique identifierinstance— class namemethod— method to call (usuallyexecute)schedule— cron expression (minute hour day month weekday)group— cron group (default, index; Adobe Commerce also has staging, catalog_event)
Cron Class
Any class with an execute() method. No interface required. Constructor injection for dependencies.
Cron Groups
- default — general tasks
- index — indexer-related tasks
- staging — staging-related tasks (Adobe Commerce only)
- catalog_event — catalog event tasks (Adobe Commerce only)
- Custom groups configurable in
etc/cron_groups.xml
Running Cron
bin/magento cron:run # Run all due cron jobs
bin/magento cron:install # Install system crontab entry
Message Queues
When to Use
For asynchronous, resource-intensive, or decoupled operations. Supports AMQP (RabbitMQ) and MySQL-based queues.
Configuration Files
communication.xml— defines topics and request/response typesqueue_consumer.xml— maps queues to consumer handler classesqueue_topology.xml— exchanges, queues, routingqueue_publisher.xml— defines where topics publish to
Consumer Pattern
Consumer class with a process($message) method. Started via:
bin/magento queue:consumers:start <consumer_name>
Best Practices
- Keep observers lightweight — offload heavy work to cron or queues
- Use area-specific events.xml to minimize scope
- Prefer message queues over synchronous observers for slow operations
- Use
indexcron group for indexer-related jobs - Log cron execution for debugging
- Handle exceptions in observers gracefully — a failing observer blocks the event chain
Fetch the events/observers and cron documentation for exact XML schemas, event names, and cron expression syntax before implementing.