tbcd / multi-dynamic-messenger
2.0.0
2023-10-31 21:51 UTC
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-03-29 01:06:33 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