A flexible, framework-agnostic Message Bus that can be easily integrated with popular frameworks such as Symfony or Laravel. It provides features like environment-specific configurations, message validation, serialization/deserialization, retry mechanisms, event listeners, middleware, and more.
-
Configuration Environment
-
Register
SymfonyConfigEnv
as a service inservices.yaml
:services: MessageBus\Implementations\SymfonyConfigEnv: arguments: $params: '@parameter_bag'
-
Use
SymfonyConfigEnv
to initializeConfigurationManager
:use MessageBus\ConfigurationManager; use MessageBus\Implementations\SymfonyConfigEnv; $configManager = new ConfigurationManager([new SymfonyConfigEnv($params)]); $configManager->loadConfiguration('symfony');
-
-
MessageBus Service
-
Register
MessageBus
and its dependencies inservices.yaml
:services: MessageBus\MessageBus: arguments: $config: '@MessageBus\Implementations\SymfonyConfigEnv' $middlewareManager: '@MessageBus\MiddlewareManager' $retryDispatcher: '@MessageBus\RetryDispatcher' MessageBus\MiddlewareManager: ~ MessageBus\RetryDispatcher: arguments: $adapter: '@YourQueueAdapterService'
Replace
YourQueueAdapterService
with the service ID of your chosen queue adapter.
-
-
Configuration Environment
-
In the
AppServiceProvider.php
file, within theregister
method, add:$this->app->singleton(MessageBus\Interfaces\ConfigEnvInterface::class, MessageBus\Implementations\LaravelConfigEnv::class);
-
Use
LaravelConfigEnv
to initializeConfigurationManager
:use MessageBus\ConfigurationManager; use MessageBus\Implementations\LaravelConfigEnv; $configManager = new ConfigurationManager([new LaravelConfigEnv()]); $configManager->loadConfiguration('laravel');
-
-
MessageBus Service
-
Register
MessageBus
and its dependencies inAppServiceProvider.php
:$this->app->singleton(MessageBus\MessageBus::class, function ($app) { $config = $app->make(MessageBus\Interfaces\ConfigEnvInterface::class); $middlewareManager = $app->make(MessageBus\MiddlewareManager::class); $retryDispatcher = $app->make(MessageBus\RetryDispatcher::class); return new MessageBus\MessageBus($config, $middlewareManager, $retryDispatcher); }); $this->app->singleton(MessageBus\MiddlewareManager::class, function ($app) { return new MessageBus\MiddlewareManager(); }); $this->app->singleton(MessageBus\RetryDispatcher::class, function ($app) { $adapter = $app->make(YourQueueAdapterClass::class); return new MessageBus\RetryDispatcher($adapter); });
Replace
YourQueueAdapterClass
with the class name of your chosen queue adapter.
-
$message = new YourMessageClass();
$response = $messageBus->dispatch($message);
$middleware = new YourMiddlewareClass();
$messageBus->addMiddleware($middleware);
$listener = new YourEventListenerClass();
$messageBus->addEventListener(MessageBus::BEFORE_DISPATCH, $listener);
$messageBus->withRetry($message);
$serializer = new JsonSerializer(); // or XmlSerializer, etc.
$messageBus->setSerializer($serializer);
$validator = new YourValidatorClass();
$messageBus->setValidator($validator);
$configManager->loadConfiguration('production'); // or 'development', 'staging', etc.
If you wish to expand MessageBus
within your application:
- Create a class implementing the relevant interface, e.g.,
ConfigEnvInterface
,SerializerInterface
, etc. - Register your class in the appropriate place, like
ConfigurationManager
,MessageBus
, etc. - Use your class in the appropriate place in the application.