Skip to content

Commit 6ec7109

Browse files
committed
[client] Move services definition to ClientFactory.
1 parent 474e855 commit 6ec7109

File tree

5 files changed

+118
-88
lines changed

5 files changed

+118
-88
lines changed

pkg/enqueue-bundle/DependencyInjection/EnqueueExtension.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ public function load(array $configs, ContainerBuilder $container): void
4242
$loader->load('extensions/exclusive_command_extension.yml');
4343

4444
$clientFactory = new ClientFactory('default');
45+
$clientFactory->build($container, $config['client']);
4546
$clientFactory->createDriver($container, $config['transport']);
4647

4748
$configDef = $container->getDefinition('enqueue.client.default.config');
Lines changed: 1 addition & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -1,83 +1,4 @@
11
services:
2-
services:
3-
enqueue.client.default.context:
4-
class: 'Interop\Queue\Context'
5-
factory: ['@enqueue.client.default.driver', 'getContext']
6-
7-
enqueue.client.default.driver_factory:
8-
class: 'Enqueue\Client\DriverFactory'
9-
arguments:
10-
- '@enqueue.client.default.config'
11-
- '@enqueue.client.default.route_collection'
12-
13-
enqueue.client.default.config:
14-
class: 'Enqueue\Client\Config'
15-
16-
enqueue.client.default.route_collection:
17-
class: 'Enqueue\Client\RouteCollection'
18-
factory: ['Enqueue\Client\RouteCollection', 'fromArray']
19-
arguments:
20-
- []
21-
22-
enqueue.client.default.producer:
23-
class: 'Enqueue\Client\Producer'
24-
public: true
25-
arguments:
26-
- '@enqueue.client.default.driver'
27-
- '@enqueue.client.default.rpc_factory'
28-
- '@enqueue.client.default.client_extensions'
29-
30-
enqueue.client.default.spool_producer:
31-
class: 'Enqueue\Client\SpoolProducer'
32-
public: true
33-
arguments:
34-
- '@enqueue.client.default.producer'
35-
36-
enqueue.client.default.client_extensions:
37-
class: 'Enqueue\Client\ChainExtension'
38-
arguments:
39-
- []
40-
41-
enqueue.client.default.rpc_factory:
42-
class: 'Enqueue\Rpc\RpcFactory'
43-
arguments:
44-
- '@enqueue.client.default.context'
45-
46-
enqueue.client.default.router_processor:
47-
class: 'Enqueue\Client\RouterProcessor'
48-
arguments:
49-
- '@enqueue.client.default.driver'
50-
51-
enqueue.client.default.processor_registry:
52-
class: 'Enqueue\Symfony\ContainerProcessorRegistry'
53-
54-
enqueue.client.default.delegate_processor:
55-
class: 'Enqueue\Client\DelegateProcessor'
56-
arguments:
57-
- '@enqueue.client.default.processor_registry'
58-
59-
enqueue.client.default.set_router_properties_extension:
60-
class: 'Enqueue\Client\ConsumptionExtension\SetRouterPropertiesExtension'
61-
arguments:
62-
- '@enqueue.client.default.driver'
63-
tags:
64-
- { name: 'enqueue.consumption_extension', priority: 100, client: 'default' }
65-
66-
enqueue.client.default.queue_consumer:
67-
class: 'Enqueue\Consumption\QueueConsumer'
68-
arguments:
69-
- '@enqueue.client.default.context'
70-
- '@enqueue.client.default.consumption_extensions'
71-
- []
72-
- null
73-
- ~
74-
- ~
75-
76-
enqueue.client.default.consumption_extensions:
77-
class: 'Enqueue\Consumption\ChainExtension'
78-
arguments:
79-
- []
80-
812
# todo
823
enqueue.profiler.message_queue_collector:
834
class: 'Enqueue\Bundle\Profiler\MessageQueueCollector'
@@ -86,17 +7,10 @@ services:
867
tags:
878
- { name: 'data_collector', template: '@Enqueue/Profiler/panel.html.twig', id: 'enqueue.message_queue' }
889

10+
# todo
8911
enqueue.client.default.flush_spool_producer_listener:
9012
class: 'Enqueue\Symfony\Client\FlushSpoolProducerListener'
9113
arguments:
9214
- '@enqueue.client.default.spool_producer'
9315
tags:
9416
- { name: 'kernel.event_subscriber' }
95-
96-
Enqueue\Client\ProducerInterface:
97-
public: true
98-
alias: 'enqueue.client.default.producer'
99-
100-
Enqueue\Client\SpoolProducer:
101-
public: true
102-
alias: 'enqueue.client.default.spool_producer'

pkg/enqueue/Symfony/DependencyInjection/ClientFactory.php

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,33 @@
22

33
namespace Enqueue\Symfony\DependencyInjection;
44

5+
use Enqueue\Client\ChainExtension;
6+
use Enqueue\Client\Config;
7+
use Enqueue\Client\ConsumptionExtension\SetRouterPropertiesExtension;
8+
use Enqueue\Client\DelegateProcessor;
9+
use Enqueue\Client\DriverFactory;
510
use Enqueue\Client\DriverInterface;
11+
use Enqueue\Client\Producer;
12+
use Enqueue\Client\ProducerInterface;
13+
use Enqueue\Client\RouteCollection;
14+
use Enqueue\Client\RouterProcessor;
15+
use Enqueue\Client\SpoolProducer;
16+
use Enqueue\Consumption\ChainExtension as ConsumptionChainExtension;
17+
use Enqueue\Consumption\QueueConsumer;
18+
use Enqueue\Rpc\RpcFactory;
19+
use Enqueue\Symfony\ContainerProcessorRegistry;
20+
use Interop\Queue\Context;
621
use Symfony\Component\DependencyInjection\ContainerBuilder;
22+
use Symfony\Component\DependencyInjection\ContainerInterface;
723
use Symfony\Component\DependencyInjection\Reference;
824

925
/**
1026
* @internal
1127
*/
1228
final class ClientFactory
1329
{
30+
use FormatClientNameTrait;
31+
1432
/**
1533
* @var string
1634
*/
@@ -25,6 +43,88 @@ public function __construct(string $name)
2543
$this->name = $name;
2644
}
2745

46+
public function build(ContainerBuilder $container, array $config): void
47+
{
48+
$container->register($this->format('context'), Context::class)
49+
->setFactory([$this->reference('driver'), 'getContext'])
50+
;
51+
52+
$container->register($this->format('driver_factory'), DriverFactory::class)
53+
->addArgument($this->reference('config'))
54+
->addArgument($this->reference('route_collection'))
55+
;
56+
57+
$container->register($this->format('config'), Config::class);
58+
59+
$container->register($this->format('route_collection'), RouteCollection::class)
60+
->addArgument([])
61+
->setFactory([RouteCollection::class, 'fromArray'])
62+
;
63+
64+
$container->register($this->format('producer'), Producer::class)
65+
->addArgument($this->reference('driver'))
66+
->addArgument($this->reference('rpc_factory'))
67+
->addArgument($this->reference('client_extensions'))
68+
;
69+
70+
$container->register($this->format('spool_producer'), SpoolProducer::class)
71+
->addArgument($this->reference('producer'))
72+
;
73+
74+
$container->register($this->format('client_extensions'), ChainExtension::class)
75+
->addArgument([])
76+
;
77+
78+
$container->register($this->format('rpc_factory'), RpcFactory::class)
79+
->addArgument($this->reference('context'))
80+
;
81+
82+
$container->register($this->format('router_processor'), RouterProcessor::class)
83+
->addArgument($this->reference('driver'))
84+
;
85+
86+
$container->register($this->format('processor_registry'), ContainerProcessorRegistry::class);
87+
88+
$container->register($this->format('delegate_processor'), DelegateProcessor::class)
89+
->addArgument($this->reference('processor_registry'))
90+
;
91+
92+
$container->register($this->format('set_router_properties_extension'), SetRouterPropertiesExtension::class)
93+
->addArgument($this->reference('driver'))
94+
->addTag('enqueue.consumption_extension', ['priority' => 100, 'client' => $this->name])
95+
;
96+
97+
$container->register($this->format('queue_consumer'), QueueConsumer::class)
98+
->addArgument($this->reference('context'))
99+
->addArgument($this->reference('consumption_extensions'))
100+
->addArgument([])
101+
->addArgument(null)
102+
->addArgument(null)
103+
->addArgument(null)
104+
;
105+
106+
$container->register($this->format('queue_consumer'), QueueConsumer::class)
107+
->addArgument($this->reference('context'))
108+
->addArgument($this->reference('consumption_extensions'))
109+
->addArgument([])
110+
->addArgument(new Reference('logger', ContainerInterface::NULL_ON_INVALID_REFERENCE))
111+
;
112+
113+
$container->register($this->format('consumption_extensions'), ConsumptionChainExtension::class)
114+
->addArgument([])
115+
;
116+
117+
if ('default' === $this->name) {
118+
$container->setAlias(ProducerInterface::class, $this->format('producer'))
119+
->setPublic(true)
120+
;
121+
122+
$container->setAlias(SpoolProducer::class, $this->format('spool_producer'))
123+
->setPublic(true)
124+
;
125+
}
126+
}
127+
28128
public function createDriver(ContainerBuilder $container, array $config): string
29129
{
30130
$factoryId = sprintf('enqueue.transport.%s.connection_factory', $this->getName());

pkg/enqueue/Symfony/DependencyInjection/FormatClientNameTrait.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,24 @@
22

33
namespace Enqueue\Symfony\DependencyInjection;
44

5+
use Symfony\Component\DependencyInjection\Reference;
6+
57
trait FormatClientNameTrait
68
{
79
abstract protected function getName(): string;
810

11+
private function reference(string $serviceName): Reference
12+
{
13+
return new Reference($this->format($serviceName));
14+
}
15+
16+
private function parameter(string $serviceName): string
17+
{
18+
$fullName = $this->format($serviceName, false);
19+
20+
return "%$fullName%";
21+
}
22+
923
private function format(string $serviceName, $parameter = false): string
1024
{
1125
$pattern = 'enqueue.client.%s.'.$serviceName;

pkg/enqueue/Symfony/DependencyInjection/TransportFactory.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
use Interop\Queue\Context;
1717
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
1818
use Symfony\Component\DependencyInjection\ContainerBuilder;
19+
use Symfony\Component\DependencyInjection\ContainerInterface;
1920
use Symfony\Component\DependencyInjection\Reference;
2021

2122
/**
@@ -180,7 +181,7 @@ public function buildQueueConsumer(ContainerBuilder $container, array $config):
180181
->addArgument(new Reference($contextId))
181182
->addArgument(new Reference($this->format('consumption_extensions')))
182183
->addArgument([])
183-
->addArgument(null)
184+
->addArgument(new Reference('logger', ContainerInterface::NULL_ON_INVALID_REFERENCE))
184185
->addArgument($this->format('receive_timeout', true))
185186
;
186187

0 commit comments

Comments
 (0)