@@ -168,6 +168,57 @@ like this:
168
168
The first argument is the receiver's service name. It might have been created by
169
169
your ``transports `` configuration or it can be your own receiver.
170
170
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
+
171
222
Your own Transport
172
223
------------------
173
224
0 commit comments