Skip to content

Commit 5abf4dc

Browse files
committed
[client][bundle] Move client configuration to ClientFactory.
1 parent b8ab683 commit 5abf4dc

15 files changed

+91
-109
lines changed

Diff for: pkg/enqueue-bundle/DependencyInjection/EnqueueExtension.php

+6-56
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,14 @@
66
use Enqueue\AsyncEventDispatcher\DependencyInjection\AsyncEventDispatcherExtension;
77
use Enqueue\Client\CommandSubscriberInterface;
88
use Enqueue\Client\TopicSubscriberInterface;
9-
use Enqueue\Client\TraceableProducer;
109
use Enqueue\JobQueue\Job;
1110
use Enqueue\Symfony\DependencyInjection\ClientFactory;
1211
use Enqueue\Symfony\DependencyInjection\TransportFactory;
1312
use Symfony\Component\Config\FileLocator;
1413
use Symfony\Component\Config\Resource\FileResource;
15-
use Symfony\Component\DependencyInjection\Alias;
1614
use Symfony\Component\DependencyInjection\ContainerBuilder;
1715
use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface;
1816
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
19-
use Symfony\Component\DependencyInjection\Reference;
2017
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
2118

2219
final class EnqueueExtension extends Extension implements PrependExtensionInterface
@@ -38,62 +35,15 @@ public function load(array $configs, ContainerBuilder $container): void
3835
$this->setupAutowiringForProcessors($container);
3936

4037
$loader->load('client.yml');
41-
$loader->load('extensions/flush_spool_producer_extension.yml');
42-
$loader->load('extensions/exclusive_command_extension.yml');
38+
39+
$clientConfig = $config['client'];
40+
// todo
41+
$clientConfig['transport'] = $config['transport'];
42+
$clientConfig['consumption'] = $config['consumption'];
4343

4444
$clientFactory = new ClientFactory('default');
45-
$clientFactory->build($container, $config['client']);
45+
$clientFactory->build($container, $clientConfig);
4646
$clientFactory->createDriver($container, $config['transport']);
47-
48-
$configDef = $container->getDefinition('enqueue.client.default.config');
49-
$configDef->setArguments([
50-
$config['client']['prefix'],
51-
$config['client']['app_name'],
52-
$config['client']['router_topic'],
53-
$config['client']['router_queue'],
54-
$config['client']['default_processor_queue'],
55-
$config['client']['router_processor'],
56-
// @todo should be driver options.
57-
$config['transport'],
58-
]);
59-
60-
$container->setParameter('enqueue.client.default.router_processor', $config['client']['router_processor']);
61-
$container->setParameter('enqueue.client.router_queue_name', $config['client']['router_queue']);
62-
$container->setParameter('enqueue.client.default_queue_name', $config['client']['default_processor_queue']);
63-
64-
if ($config['client']['traceable_producer']) {
65-
$container->register('enqueue.client.default.traceable_producer', TraceableProducer::class)
66-
->setDecoratedService('enqueue.client.default.producer')
67-
->setPublic(true)
68-
->addArgument(new Reference('enqueue.client.default.traceable_producer.inner'))
69-
;
70-
71-
// todo do alias only for default transport
72-
$container->setAlias(TraceableProducer::class, new Alias('enqueue.client.default.traceable_producer'));
73-
}
74-
75-
if ($config['client']['redelivered_delay_time']) {
76-
$loader->load('extensions/delay_redelivered_message_extension.yml');
77-
78-
$container->getDefinition('enqueue.client.default.delay_redelivered_message_extension')
79-
->replaceArgument(1, $config['client']['redelivered_delay_time'])
80-
;
81-
}
82-
83-
$locatorId = 'enqueue.locator';
84-
if ($container->hasDefinition($locatorId)) {
85-
$locator = $container->getDefinition($locatorId);
86-
$locator->replaceArgument(0, array_replace($locator->getArgument(0), [
87-
'enqueue.client.default.queue_consumer' => new Reference('enqueue.client.default.queue_consumer'),
88-
'enqueue.client.default.driver' => new Reference('enqueue.client.default.driver'),
89-
'enqueue.client.default.delegate_processor' => new Reference('enqueue.client.default.delegate_processor'),
90-
'enqueue.client.default.producer' => new Reference('enqueue.client.default.producer'),
91-
]));
92-
}
93-
94-
$container->getDefinition('enqueue.client.default.queue_consumer')
95-
->replaceArgument(4, $config['consumption']['receive_timeout'])
96-
;
9747
}
9848

9949
if ($config['job']) {

Diff for: pkg/enqueue-bundle/Resources/config/extensions/delay_redelivered_message_extension.yml

-9
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
services:
22
enqueue.consumption.doctrine_clear_identity_map_extension:
33
class: 'Enqueue\Bundle\Consumption\Extension\DoctrineClearIdentityMapExtension'
4-
public: false
54
arguments:
65
- '@doctrine'
76
tags:
8-
- { name: 'enqueue.consumption_extension', client: 'default' }
7+
- { name: 'enqueue.consumption_extension', client: 'all' }
8+
- { name: 'enqueue.transport.consumption_extension', transport: 'all' }
9+
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
services:
22
enqueue.consumption.doctrine_ping_connection_extension:
33
class: 'Enqueue\Bundle\Consumption\Extension\DoctrinePingConnectionExtension'
4-
public: false
54
arguments:
65
- '@doctrine'
76
tags:
8-
- { name: 'enqueue.consumption.extension', client: 'default' }
7+
- { name: 'enqueue.consumption_extension', client: 'all' }
8+
- { name: 'enqueue.transport.consumption_extension', transport: 'all' }

Diff for: pkg/enqueue-bundle/Resources/config/extensions/exclusive_command_extension.yml

-8
This file was deleted.

Diff for: pkg/enqueue-bundle/Resources/config/extensions/flush_spool_producer_extension.yml

-8
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
services:
22
enqueue.consumption.reply_extension:
33
class: 'Enqueue\Consumption\Extension\ReplyExtension'
4-
public: false
54
tags:
6-
- { name: 'enqueue.consumption.extension', client: 'default' }
5+
- { name: 'enqueue.consumption_extension', client: 'all' }
6+
- { name: 'enqueue.transport.consumption_extension', transport: 'all' }
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
services:
22
enqueue.consumption.signal_extension:
33
class: 'Enqueue\Consumption\Extension\SignalExtension'
4-
public: false
54
tags:
6-
- { name: 'enqueue.consumption.extension', client: 'default' }
5+
- { name: 'enqueue.consumption_extension', client: 'all' }
6+
- { name: 'enqueue.transport.consumption_extension', transport: 'all' }

Diff for: pkg/enqueue-bundle/Tests/Functional/App/config/config.yml

+4
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,10 @@ services:
5050
alias: 'enqueue.client.default.producer'
5151
public: true
5252

53+
test_enqueue.client.default.spool_producer:
54+
alias: 'enqueue.client.default.spool_producer'
55+
public: true
56+
5357
test_Enqueue\Client\ProducerInterface:
5458
alias: 'Enqueue\Client\ProducerInterface'
5559
public: true

Diff for: pkg/enqueue-bundle/Tests/Functional/App/config/custom-config.yml

+4
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ services:
1919
alias: 'enqueue.client.default.driver'
2020
public: true
2121

22+
test_enqueue.client.default.producer:
23+
alias: 'enqueue.client.default.producer'
24+
public: true
25+
2226
test_enqueue.transport.default.context:
2327
alias: 'enqueue.transport.default.context'
2428
public: true

Diff for: pkg/enqueue-bundle/Tests/Functional/Client/SpoolProducerTest.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ class SpoolProducerTest extends WebTestCase
1212
{
1313
public function testCouldBeGetFromContainerAsService()
1414
{
15-
$producer = static::$container->get('enqueue.client.default.spool_producer');
15+
$producer = static::$container->get('test_enqueue.client.default.spool_producer');
1616

1717
$this->assertInstanceOf(SpoolProducer::class, $producer);
1818
}

Diff for: pkg/enqueue-bundle/Tests/Functional/UseCasesTest.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,7 @@ protected static function createKernel(array $options = []): CustomAppKernel
363363

364364
private function getMessageProducer(): ProducerInterface
365365
{
366-
return static::$container->get('enqueue.client.default.producer');
366+
return static::$container->get('test_enqueue.client.default.producer');
367367
}
368368

369369
private function getContext(): Context

Diff for: pkg/enqueue/Symfony/DependencyInjection/ClientFactory.php

+61-15
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44

55
use Enqueue\Client\ChainExtension;
66
use Enqueue\Client\Config;
7+
use Enqueue\Client\ConsumptionExtension\DelayRedeliveredMessageExtension;
8+
use Enqueue\Client\ConsumptionExtension\ExclusiveCommandExtension;
9+
use Enqueue\Client\ConsumptionExtension\FlushSpoolProducerExtension;
710
use Enqueue\Client\ConsumptionExtension\SetRouterPropertiesExtension;
811
use Enqueue\Client\DelegateProcessor;
912
use Enqueue\Client\DriverFactory;
@@ -13,6 +16,7 @@
1316
use Enqueue\Client\RouteCollection;
1417
use Enqueue\Client\RouterProcessor;
1518
use Enqueue\Client\SpoolProducer;
19+
use Enqueue\Client\TraceableProducer;
1620
use Enqueue\Consumption\ChainExtension as ConsumptionChainExtension;
1721
use Enqueue\Consumption\QueueConsumer;
1822
use Enqueue\Rpc\RpcFactory;
@@ -54,7 +58,21 @@ public function build(ContainerBuilder $container, array $config): void
5458
->addArgument($this->reference('route_collection'))
5559
;
5660

57-
$container->register($this->format('config'), Config::class);
61+
$container->register($this->format('config'), Config::class)
62+
->setArguments([
63+
$config['prefix'],
64+
$config['app_name'],
65+
$config['router_topic'],
66+
$config['router_queue'],
67+
$config['default_processor_queue'],
68+
$config['router_processor'],
69+
// @todo should be driver options.
70+
$config['transport'],
71+
]);
72+
73+
$container->setParameter($this->format('router_processor'), $config['router_processor']);
74+
$container->setParameter($this->format('router_queue_name'), $config['router_queue']);
75+
$container->setParameter($this->format('default_queue_name'), $config['default_processor_queue']);
5876

5977
$container->register($this->format('route_collection'), RouteCollection::class)
6078
->addArgument([])
@@ -98,31 +116,59 @@ public function build(ContainerBuilder $container, array $config): void
98116
->addArgument($this->reference('context'))
99117
->addArgument($this->reference('consumption_extensions'))
100118
->addArgument([])
101-
->addArgument(null)
102-
->addArgument(null)
103-
->addArgument(null)
119+
->addArgument($this->reference('logger', ContainerInterface::NULL_ON_INVALID_REFERENCE))
120+
->addArgument($config['consumption']['receive_timeout'])
104121
;
105122

106-
$container->register($this->format('queue_consumer'), QueueConsumer::class)
107-
->addArgument($this->reference('context'))
108-
->addArgument($this->reference('consumption_extensions'))
123+
$container->register($this->format('consumption_extensions'), ConsumptionChainExtension::class)
109124
->addArgument([])
110-
->addArgument(new Reference('logger', ContainerInterface::NULL_ON_INVALID_REFERENCE))
111125
;
112126

113-
$container->register($this->format('consumption_extensions'), ConsumptionChainExtension::class)
114-
->addArgument([])
127+
$container->register($this->format('flush_spool_producer_extension'), FlushSpoolProducerExtension::class)
128+
->addArgument($this->reference('spool_producer'))
129+
->addTag('enqueue.consumption.extension', ['priority' => -100, 'client' => $this->name])
115130
;
116131

117-
if ('default' === $this->name) {
118-
$container->setAlias(ProducerInterface::class, $this->format('producer'))
119-
->setPublic(true)
132+
$container->register($this->format('exclusive_command_extension'), ExclusiveCommandExtension::class)
133+
->addArgument($this->reference('driver'))
134+
->addTag('enqueue.consumption.extension', ['priority' => 100, 'client' => $this->name])
135+
;
136+
137+
if ($config['traceable_producer']) {
138+
$container->register($this->format('traceable_producer'), TraceableProducer::class)
139+
->setDecoratedService($this->format('producer'))
140+
->addArgument($this->reference('traceable_producer.inner'))
141+
;
142+
}
143+
144+
if ($config['redelivered_delay_time']) {
145+
$container->register($this->format('delay_redelivered_message_extension'), DelayRedeliveredMessageExtension::class)
146+
->addArgument($this->reference('driver'))
147+
->addArgument($config['redelivered_delay_time'])
148+
->addTag('enqueue.consumption_extension', ['priority' => 10, 'client' => $this->name])
120149
;
121150

122-
$container->setAlias(SpoolProducer::class, $this->format('spool_producer'))
123-
->setPublic(true)
151+
$container->getDefinition('enqueue.client.default.delay_redelivered_message_extension')
152+
->replaceArgument(1, $config['redelivered_delay_time'])
124153
;
125154
}
155+
156+
$locatorId = 'enqueue.locator';
157+
if ($container->hasDefinition($locatorId)) {
158+
$locator = $container->getDefinition($locatorId);
159+
$locator->replaceArgument(0, array_replace($locator->getArgument(0), [
160+
$this->format('queue_consumer') => $this->reference('queue_consumer'),
161+
$this->format('driver') => $this->reference('driver'),
162+
$this->format('delegate_processor') => $this->reference('delegate_processor'),
163+
$this->format('producer') => $this->reference('producer'),
164+
]));
165+
}
166+
167+
if ('default' === $this->name) {
168+
$container->setAlias(ProducerInterface::class, $this->format('producer'));
169+
170+
$container->setAlias(SpoolProducer::class, $this->format('spool_producer'));
171+
}
126172
}
127173

128174
public function createDriver(ContainerBuilder $container, array $config): string

Diff for: pkg/enqueue/Symfony/DependencyInjection/FormatClientNameTrait.php

+3-2
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,16 @@
22

33
namespace Enqueue\Symfony\DependencyInjection;
44

5+
use Symfony\Component\DependencyInjection\ContainerInterface;
56
use Symfony\Component\DependencyInjection\Reference;
67

78
trait FormatClientNameTrait
89
{
910
abstract protected function getName(): string;
1011

11-
private function reference(string $serviceName): Reference
12+
private function reference(string $serviceName, $invalidBehavior = ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE): Reference
1213
{
13-
return new Reference($this->format($serviceName));
14+
return new Reference($this->format($serviceName), $invalidBehavior);
1415
}
1516

1617
private function parameter(string $serviceName): string

Diff for: pkg/enqueue/Tests/Symfony/DependencyInjection/TransportFactoryTest.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use Symfony\Component\Config\Definition\Exception\InvalidConfigurationException;
1616
use Symfony\Component\Config\Definition\Processor;
1717
use Symfony\Component\DependencyInjection\ContainerBuilder;
18+
use Symfony\Component\DependencyInjection\ContainerInterface;
1819
use Symfony\Component\DependencyInjection\Reference;
1920

2021
class TransportFactoryTest extends TestCase
@@ -388,7 +389,7 @@ public function testShouldBuildQueueConsumerWithDefaultOptions()
388389
new Reference('enqueue.transport.default.context'),
389390
new Reference('enqueue.transport.default.consumption_extensions'),
390391
[],
391-
null,
392+
new Reference('logger', ContainerInterface::NULL_ON_INVALID_REFERENCE),
392393
'%enqueue.transport.default.receive_timeout%',
393394
], $container->getDefinition('enqueue.transport.default.queue_consumer')->getArguments());
394395
}

0 commit comments

Comments
 (0)