Skip to content

qbejs/UniversalMessageBus

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Universal Message Bus

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.

Integration

Symfony

  1. Configuration Environment

    • Register SymfonyConfigEnv as a service in services.yaml:

      services:
          MessageBus\Implementations\SymfonyConfigEnv:
              arguments:
                  $params: '@parameter_bag'
    • Use SymfonyConfigEnv to initialize ConfigurationManager:

      use MessageBus\ConfigurationManager;
      use MessageBus\Implementations\SymfonyConfigEnv;
      
      $configManager = new ConfigurationManager([new SymfonyConfigEnv($params)]);
      $configManager->loadConfiguration('symfony');
  2. MessageBus Service

    • Register MessageBus and its dependencies in services.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.

Laravel

  1. Configuration Environment

    • In the AppServiceProvider.php file, within the register method, add:

      $this->app->singleton(MessageBus\Interfaces\ConfigEnvInterface::class, MessageBus\Implementations\LaravelConfigEnv::class);
    • Use LaravelConfigEnv to initialize ConfigurationManager:

      use MessageBus\ConfigurationManager;
      use MessageBus\Implementations\LaravelConfigEnv;
      
      $configManager = new ConfigurationManager([new LaravelConfigEnv()]);
      $configManager->loadConfiguration('laravel');
  2. MessageBus Service

    • Register MessageBus and its dependencies in AppServiceProvider.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.

Usage

Sending and Receiving Messages

$message = new YourMessageClass();
$response = $messageBus->dispatch($message);

Middleware

$middleware = new YourMiddlewareClass();
$messageBus->addMiddleware($middleware);

Event Listeners

$listener = new YourEventListenerClass();
$messageBus->addEventListener(MessageBus::BEFORE_DISPATCH, $listener);

Retry Mechanisms

$messageBus->withRetry($message);

Serialization and Deserialization

$serializer = new JsonSerializer(); // or XmlSerializer, etc.
$messageBus->setSerializer($serializer);

Validation

$validator = new YourValidatorClass();
$messageBus->setValidator($validator);

Environment-specific Configuration

$configManager->loadConfiguration('production'); // or 'development', 'staging', etc.

Expansion

If you wish to expand MessageBus within your application:

  1. Create a class implementing the relevant interface, e.g., ConfigEnvInterface, SerializerInterface, etc.
  2. Register your class in the appropriate place, like ConfigurationManager, MessageBus, etc.
  3. Use your class in the appropriate place in the application.

About

Simple framework agnostic message bus package

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages