@@ -168,6 +168,57 @@ like this:
168168 The first argument is the receiver's service name. It might have been created by
169169your ``transports `` configuration or it can be your own receiver.
170170
171+ Multiple buses
172+ --------------
173+
174+ If you are interested into architectures like CQRS, you might want to have multiple
175+ buses within your application.
176+
177+ You can create multiple buses (in this example, a command and an event bus) like
178+ this:
179+
180+ ..code-block ::yaml
181+
182+ framework :
183+ messenger :
184+ # The bus that is going to be injected when injecting MessageBusInterface:
185+ default_bus :commands
186+
187+ # Create buses
188+ buses :
189+ commands :~
190+ events :~
191+
192+ This will generate the ``messenger.bus.commands `` and ``messenger.bus.events `` services
193+ that you can inject in your services.
194+
195+ Type-hints and auto-wiring
196+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
197+
198+ Auto-wiring is a great feature that allows you to reduce the amount of configuration
199+ required for your service container to be created. When using multiple buses, by default,
200+ the auto-wiring will not work as it won't know why bus to inject in your own services.
201+
202+ In order to clarify this, you will have to create your own decorators for your message
203+ buses. Let's create one for your ``CommandBus ``::
204+
205+ namespace App;
206+
207+ use Symfony\Component\Messenger\AbstractMessageBusDecorator;
208+
209+ final class CommandBus extends AbstractMessageBusDecorator
210+ {
211+ }
212+
213+ Last step is to register your service (and explicit its argument) to be able to typehint
214+ your ``CommandBus `` in your services:
215+
216+ ..code-block ::yaml
217+
218+ # config/services.yaml
219+ services :
220+ App\CommandBus :['@messenger.bus.commands']
221+
171222 Your own Transport
172223------------------
173224