Skip to content

Commit 4a3f754

Browse files
committed
[Messenger] Multiples buses, scoping handlers per bus, PSR-4 discovery & debug
1 parent 9973d67 commit 4a3f754

File tree

4 files changed

+309
-147
lines changed

4 files changed

+309
-147
lines changed

components/messenger.rst

+9
Original file line numberDiff line numberDiff line change
@@ -291,5 +291,14 @@ loop, the message bus will add a :class:`Symfony\\Component\\Messenger\\Asynchro
291291
envelope item to the message envelopes and the :class:`Symfony\\Component\\Messenger\\Asynchronous\\Middleware\\SendMessageMiddleware`
292292
middleware will know it should not route these messages again to a transport.
293293

294+
Learn more
295+
----------
296+
.. toctree::
297+
:maxdepth: 1
298+
:glob:
299+
300+
/messenger
301+
/messenger/*
302+
294303
.. _blog posts about command buses: https://matthiasnoback.nl/tags/command%20bus/
295304
.. _SimpleBus project: http://simplebus.io

messenger.rst

+8-106
Original file line numberDiff line numberDiff line change
@@ -421,112 +421,6 @@ like this:
421421
The first argument is the receiver's service name. It might have been created by
422422
your ``transports`` configuration or it can be your own receiver.
423423

424-
Multiple Buses
425-
--------------
426-
427-
If you are interested in architectures like CQRS, you might want to have multiple
428-
buses within your application.
429-
430-
You can create multiple buses (in this example, a command bus and an event bus) like
431-
this:
432-
433-
.. configuration-block::
434-
435-
.. code-block:: yaml
436-
437-
# config/packages/messenger.yaml
438-
framework:
439-
messenger:
440-
# The bus that is going to be injected when injecting MessageBusInterface:
441-
default_bus: messenger.bus.commands
442-
443-
# Create buses
444-
buses:
445-
messenger.bus.commands: ~
446-
messenger.bus.events: ~
447-
448-
.. code-block:: xml
449-
450-
<!-- config/packages/messenger.xml -->
451-
<?xml version="1.0" encoding="UTF-8" ?>
452-
<container xmlns="http://symfony.com/schema/dic/services"
453-
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
454-
xmlns:framework="http://symfony.com/schema/dic/symfony"
455-
xsi:schemaLocation="http://symfony.com/schema/dic/services
456-
http://symfony.com/schema/dic/services/services-1.0.xsd
457-
http://symfony.com/schema/dic/symfony
458-
http://symfony.com/schema/dic/symfony/symfony-1.0.xsd">
459-
460-
<framework:config>
461-
<framework:messenger default-bus="messenger.bus.commands">
462-
<framework:bus name="messenger.bus.commands" />
463-
<framework:bus name="messenger.bus.events" />
464-
</framework:messenger>
465-
</framework:config>
466-
</container>
467-
468-
.. code-block:: php
469-
470-
// config/packages/messenger.php
471-
$container->loadFromExtension('framework', array(
472-
'messenger' => array(
473-
'default_bus' => 'messenger.bus.commands',
474-
'buses' => array(
475-
'messenger.bus.commands' => null,
476-
'messenger.bus.events' => null,
477-
),
478-
),
479-
));
480-
481-
This will generate the ``messenger.bus.commands`` and ``messenger.bus.events`` services
482-
that you can inject in your services.
483-
484-
.. note::
485-
486-
To register a handler only for a specific bus, add a ``bus`` attribute to
487-
the handler's service tag (``messenger.message_handler``) and use the bus
488-
name as its value.
489-
490-
Type-hints and Auto-wiring
491-
~~~~~~~~~~~~~~~~~~~~~~~~~~
492-
493-
Auto-wiring is a great feature that allows you to reduce the amount of configuration
494-
required for your service container to be created. When using multiple buses, by default,
495-
the auto-wiring will not work as it won't know which bus to inject in your own services.
496-
497-
In order to clarify this, you can use the DependencyInjection's binding capabilities
498-
to clarify which bus will be injected based on the argument's name:
499-
500-
.. configuration-block::
501-
502-
.. code-block:: yaml
503-
504-
# config/services.yaml
505-
services:
506-
_defaults:
507-
# ...
508-
509-
bind:
510-
$commandBus: '@messenger.bus.commands'
511-
$eventBus: '@messenger.bus.events'
512-
513-
.. code-block:: xml
514-
515-
<!-- config/services.xml -->
516-
<?xml version="1.0" encoding="UTF-8" ?>
517-
<container xmlns="http://symfony.com/schema/dic/services"
518-
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
519-
xsi:schemaLocation="http://symfony.com/schema/dic/services
520-
http://symfony.com/schema/dic/services/services-1.0.xsd">
521-
522-
<services>
523-
<defaults>
524-
<bind key="$commandBus" type="service" id="messenger.bus.commands" />
525-
<bind key="$commandBus" type="service" id="messenger.bus.events" />
526-
</defaults>
527-
</services>
528-
</container>
529-
530424
Middleware
531425
----------
532426

@@ -961,4 +855,12 @@ will give you access to the following services:
961855
#. ``messenger.sender.yours``: the sender;
962856
#. ``messenger.receiver.yours``: the receiver.
963857

858+
Learn more
859+
----------
860+
.. toctree::
861+
:maxdepth: 1
862+
:glob:
863+
864+
/messenger/*
865+
964866
.. _`enqueue's transport`: https://github.com/php-enqueue/messenger-adapter

messenger/multiple-buses.rst

-41
This file was deleted.

0 commit comments

Comments
 (0)