Skip to content

Commit efd9543

Browse files
author
Matías Navarro Carter
committed
Autowiring for PsrProcessors implementing CommandSubscriberInterface or TopicSubscriberInterface
This will allow to symfony users that have autowiring/autoconfigure enabled to be able to rapidly create their processors without worrying registering them as a service and adding the tag. This closes #409 and #405. Also, keeps in mind #410. That's why services are public until a better solution is implemented.
1 parent cc52299 commit efd9543

File tree

2 files changed

+46
-0
lines changed

2 files changed

+46
-0
lines changed

pkg/enqueue-bundle/DependencyInjection/EnqueueExtension.php

+19
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
namespace Enqueue\Bundle\DependencyInjection;
44

55
use Enqueue\AsyncEventDispatcher\DependencyInjection\AsyncEventDispatcherExtension;
6+
use Enqueue\Client\CommandSubscriberInterface;
67
use Enqueue\Client\Producer;
8+
use Enqueue\Client\TopicSubscriberInterface;
79
use Enqueue\Client\TraceableProducer;
810
use Enqueue\Consumption\QueueConsumer;
911
use Enqueue\JobQueue\Job;
@@ -72,6 +74,8 @@ public function load(array $configs, ContainerBuilder $container)
7274
$loader = new YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
7375
$loader->load('services.yml');
7476

77+
$this->setupAutowiringForProcessors($container);
78+
7579
foreach ($config['transport'] as $name => $transportConfig) {
7680
$this->factories[$name]->createConnectionFactory($container, $transportConfig);
7781
$this->factories[$name]->createContext($container, $transportConfig);
@@ -220,4 +224,19 @@ private function registerJobQueueDoctrineEntityMapping(ContainerBuilder $contain
220224
}
221225
}
222226
}
227+
228+
private function setupAutowiringForProcessors(ContainerBuilder $container)
229+
{
230+
if (!method_exists($container, 'registerForAutoconfiguration')) {
231+
return;
232+
}
233+
234+
$container->registerForAutoconfiguration(TopicSubscriberInterface::class)
235+
->setPublic(true)
236+
->addTag('enqueue.client.processor');
237+
238+
$container->registerForAutoconfiguration(CommandSubscriberInterface::class)
239+
->setPublic(true)
240+
->addTag('enqueue.client.processor');
241+
}
223242
}

pkg/enqueue-bundle/Tests/Unit/DependencyInjection/EnqueueExtensionTest.php

+27
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@
66
use Enqueue\Bundle\DependencyInjection\EnqueueExtension;
77
use Enqueue\Bundle\Tests\Unit\Mocks\FooTransportFactory;
88
use Enqueue\Bundle\Tests\Unit\Mocks\TransportFactoryWithoutDriverFactory;
9+
use Enqueue\Client\CommandSubscriberInterface;
910
use Enqueue\Client\Producer;
1011
use Enqueue\Client\ProducerInterface;
12+
use Enqueue\Client\TopicSubscriberInterface;
1113
use Enqueue\Client\TraceableProducer;
1214
use Enqueue\Consumption\QueueConsumer;
1315
use Enqueue\JobQueue\JobRunner;
@@ -633,6 +635,31 @@ public function testShouldThrowIfPackageShouldBeInstalledToUseTransport()
633635
]], $container);
634636
}
635637

638+
public function testShouldLoadProcessAutoconfigureChildDefinition()
639+
{
640+
$container = $this->getContainerBuilder(true);
641+
$extension = new EnqueueExtension();
642+
643+
$extension->load([[
644+
'client' => [],
645+
'transport' => [],
646+
]], $container);
647+
648+
if (method_exists($container, 'registerForAutoconfiguration')) {
649+
$autoconfigured = $container->getAutoconfiguredInstanceof();
650+
651+
self::assertArrayHasKey(CommandSubscriberInterface::class, $autoconfigured);
652+
self::assertTrue($autoconfigured[CommandSubscriberInterface::class]->hasTag('enqueue.client.processor'));
653+
self::assertTrue($autoconfigured[CommandSubscriberInterface::class]->isPublic());
654+
655+
self::assertArrayHasKey(TopicSubscriberInterface::class, $autoconfigured);
656+
self::assertTrue($autoconfigured[TopicSubscriberInterface::class]->hasTag('enqueue.client.processor'));
657+
self::assertTrue($autoconfigured[TopicSubscriberInterface::class]->isPublic());
658+
} else {
659+
$this->assertTrue(true);
660+
}
661+
}
662+
636663
/**
637664
* @param bool $debug
638665
*

0 commit comments

Comments
 (0)