PHP 7.1+ lightweight message bus supporting CQRS and Micro Services
This library will receive support until December 31, 2019 and will then be deprecated.
For further information see the official announcement here: https://www.sasaprolic.com/2018/08/the-future-of-prooph-components.html
prooph/service-bus is a lightweight messaging facade. It allows you to define the API of your model with the help of messages.
- Command messages describe actions your model can handle.
- Event messages describe things that happened while your model handled a command.
- Query messages describe available information that can be fetched from your (read) model.
prooph/service-bus shields your model. Data input and output ports become irrelevant and no longer influence business logic. We're looking at you Hexagonal Architecture.
prooph/service-bus decouples your model from any framework. You can use a web framework like Zend, Symfony, Laravel and co. to handle http requests and pass them via prooph/service-bus to your model but you can also receive the same messages via CLI or from a messaging system like RabbitMQ or Beanstalkd.
It is also a perfect fit for microservices architecture as it provides an abstraction layer for message-based inter-service communication.
You can install prooph/service-bus via composer by running composer require prooph/service-bus
, which will install the latest version as requirement to your composer.json.
<?php
use Prooph\ServiceBus\CommandBus;
use Prooph\ServiceBus\Example\Command\EchoText;
use Prooph\ServiceBus\Plugin\Router\CommandRouter;
$commandBus = new CommandBus();
$router = new CommandRouter();
//Register a callback as CommandHandler for the EchoText command
$router->route('Prooph\ServiceBus\Example\Command\EchoText')
->to(function (EchoText $aCommand): void {
echo $aCommand->getText();
});
//Expand command bus with the router plugin
$router->attachToMessageBus($commandBus);
//We create a new Command
$echoText = new EchoText('It works');
//... and dispatch it
$commandBus->dispatch($echoText);
//Output should be: It works
Documentation is in the docs tree, and can be compiled using bookdown.
$ php ./vendor/bin/bookdown docs/bookdown.json
$ php -S 0.0.0.0:8080 -t docs/html/
Then browse to http://localhost:8080/
- Ask questions on Stack Overflow tagged with #prooph.
- File issues at https://github.com/prooph/service-bus/issues.
- Say hello in the prooph gitter chat.
Please feel free to fork and extend existing or add new features and send a pull request with your changes! To establish a consistent code quality, please provide unit tests for all your changes and may adapt the documentation.
Released under the New BSD License.