Message Bus integration into Nette Framework
$ composer require nepada/message-bus-nette
Register the extension in
extensions: messageBus: Nepada\MessageBusNette\DI\MessageBusExtension
See nepada/message-bus for the documentation of the core library.
The extension tries to autowire PSR compatible logger into logging middleware. If this doesn't work for you, specify the logger service in configuration explicitly:
messageBus: logger: @myLoggerService
Nested command handling
Nested command handling is not allowed by default, this can be changed in configuration:
messageBus: allowNestedCommandHandling: true
Doctrine ORM specific features for message bus are provided by nepada/message-bus-doctrine package. Follow the link for more detailed documentation. Once you install the package, it gets detected by DI extension and all necessary services are set up.
With Doctrine integration:
- all commands are handled in a transaction and all changes are automatically flushed and commited after the handler successfully finishes, or rolled back on error,
- database transactions started outside of command bus are forbidden,
- entity manager is (optionally) cleared before and after the handling of every command.
Change or completely disable the default entity manager clearing logic:
messageBus: clearEntityManager onStart: false onSuccess: false onError: false
You can record your domain events inside entities implementing
Nepada\Bridges\MessageBusDoctrine\Events\ContainsRecordedEvents and they will be automatically collected and dispatched on flush.
Tip: use SearchExtension to auto-register command handlers and event subscribers
search: messageBusHandlers: in: %appDir% implements: - Nepada\MessageBus\Commands\CommandHandler - Nepada\MessageBus\Events\EventSubscriber