From ac8cafe64016e0fd92b10d678e4afc7017c58f5c Mon Sep 17 00:00:00 2001 From: d-ph Date: Fri, 2 Sep 2022 17:25:48 +0100 Subject: [PATCH] Wire PostgreSqlNotifyOnIdleListener for doctrine-messenger --- config/messenger.php | 10 +++++++++- src/DependencyInjection/DoctrineExtension.php | 5 +++++ tests/DependencyInjection/DoctrineExtensionTest.php | 3 ++- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/config/messenger.php b/config/messenger.php index 54eb42934..9504589de 100644 --- a/config/messenger.php +++ b/config/messenger.php @@ -10,6 +10,7 @@ use Symfony\Bridge\Doctrine\Messenger\DoctrinePingConnectionMiddleware; use Symfony\Bridge\Doctrine\Messenger\DoctrineTransactionMiddleware; use Symfony\Bridge\Doctrine\SchemaListener\MessengerTransportDoctrineSchemaListener; +use Symfony\Component\Messenger\Bridge\Doctrine\EventListener\PostgreSqlNotifyOnIdleListener; use Symfony\Component\Messenger\Bridge\Doctrine\Transport\DoctrineTransportFactory; return static function (ContainerConfigurator $container): void { @@ -51,6 +52,7 @@ ->tag('messenger.transport_factory') ->args([ service('doctrine'), + service('messenger.transport.doctrine.pg_notify_on_idle_listener')->ignoreOnInvalid(), ]) ->set('doctrine.orm.messenger.doctrine_schema_listener', MessengerTransportDoctrineSchemaListener::class) @@ -58,5 +60,11 @@ tagged_iterator('messenger.receiver'), ]) ->tag('doctrine.event_listener', ['event' => 'postGenerateSchema']) - ->tag('doctrine.event_listener', ['event' => 'onSchemaCreateTable']); + ->tag('doctrine.event_listener', ['event' => 'onSchemaCreateTable']) + + ->set('messenger.transport.doctrine.pg_notify_on_idle_listener', PostgreSqlNotifyOnIdleListener::class) + ->args([ + service('logger'), + ]) + ->tag('kernel.event_subscriber'); }; diff --git a/src/DependencyInjection/DoctrineExtension.php b/src/DependencyInjection/DoctrineExtension.php index 5f372cc42..0e2714d7a 100644 --- a/src/DependencyInjection/DoctrineExtension.php +++ b/src/DependencyInjection/DoctrineExtension.php @@ -62,6 +62,7 @@ use Symfony\Component\DependencyInjection\Reference; use Symfony\Component\ExpressionLanguage\ExpressionLanguage; use Symfony\Component\Form\AbstractType; +use Symfony\Component\Messenger\Bridge\Doctrine\EventListener\PostgreSqlNotifyOnIdleListener; use Symfony\Component\Messenger\Bridge\Doctrine\Transport\DoctrineTransportFactory; use Symfony\Component\Messenger\MessageBusInterface; use Symfony\Component\PropertyInfo\PropertyInfoExtractorInterface; @@ -1434,6 +1435,10 @@ private function loadMessengerServices(ContainerBuilder $container): void $loader = new PhpFileLoader($container, new FileLocator(__DIR__ . '/../../config')); $loader->load('messenger.php'); + if (! class_exists(PostgreSqlNotifyOnIdleListener::class)) { + $container->removeDefinition('messenger.transport.doctrine.pg_notify_on_idle_listener'); + } + /** * The Doctrine transport component (symfony/doctrine-messenger) is optional. * Remove service definition, if it is not available diff --git a/tests/DependencyInjection/DoctrineExtensionTest.php b/tests/DependencyInjection/DoctrineExtensionTest.php index 0b896e5e9..69d6b9d98 100644 --- a/tests/DependencyInjection/DoctrineExtensionTest.php +++ b/tests/DependencyInjection/DoctrineExtensionTest.php @@ -809,8 +809,9 @@ public function testMessengerIntegrationWithDoctrineTransport(): void $messengerTransportDoctrineFactory = $container->getDefinition('messenger.transport.doctrine.factory'); - $this->assertCount(1, $messengerTransportDoctrineFactory->getArguments()); + $this->assertCount(2, $messengerTransportDoctrineFactory->getArguments()); $this->assertSame('doctrine', (string) $messengerTransportDoctrineFactory->getArgument(0)); + $this->assertSame('messenger.transport.doctrine.pg_notify_on_idle_listener', (string) $messengerTransportDoctrineFactory->getArgument(1)); $this->assertSame(DoctrineTransportFactory::class, $messengerTransportDoctrineFactory->getClass());