tbcd / multi-dynamic-messenger
Installs: 18
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
pkg:composer/tbcd/multi-dynamic-messenger
Requires
- php: >=8.1
- symfony/dependency-injection: ^6.0
- symfony/messenger: ^6.0
Requires (Dev)
- phpunit/phpunit: ^9.5|^10.0
This package is auto-updated.
Last update: 2025-10-29 03:39:41 UTC
README
This package is an extension of symfony/messenger component providing transport that be modified during runtime without having the restart consumers
Installation
composer require tbcd/multi-dynamic-messenger
Usage
First you have to implements a service providing the transports data. This service as to implements TransportDataProviderInterface interface
In the example below we provide transports data stored with database entities
# src\Messenger\EntityTransportDataProvider.php
class EntityTransportDataProvider implements TransportDataProviderInterface
{
    public function getAll(): array
    {
        $entities = $this->em->getRepository(TransportEntity::class)->findAll();
        return array_map(function(TransportEntity $entity) {
            return new TransportData($entity->getName(), $entity->getDsn(), $entity->getOptions());
        }, $entities);
    }
}
Then you have to configure the transport factory :
- Add the tag messenger.transport_factory to the transport factory
- Bind your TransportDataProvider
# config/services.yaml
services:
    ...
    TBCD\Messenger\MultiDynamicTransport\MultiDynamicTransportFactory:
        tags: [ messenger.transport_factory ]
        binds:
            $transportDataProvider: App\Messenger\EntityTransportDataProvider
Then you have to create the messenger transport
# config/packages/messenger.yaml
framework:
    messenger:
        transports:
            # https://symfony.com/doc/current/messenger.html#transport-configuration
            multidynamic:
                dsn: 'multi-dynamic://'
Finally, start the consumer with the command php bin/console messenger:consume mytransportname