2
2
3
3
namespace Enqueue \Symfony \DependencyInjection ;
4
4
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 ;
5
10
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 ;
6
21
use Symfony \Component \DependencyInjection \ContainerBuilder ;
22
+ use Symfony \Component \DependencyInjection \ContainerInterface ;
7
23
use Symfony \Component \DependencyInjection \Reference ;
8
24
9
25
/**
10
26
* @internal
11
27
*/
12
28
final class ClientFactory
13
29
{
30
+ use FormatClientNameTrait;
31
+
14
32
/**
15
33
* @var string
16
34
*/
@@ -25,6 +43,88 @@ public function __construct(string $name)
25
43
$ this ->name = $ name ;
26
44
}
27
45
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
+
28
128
public function createDriver (ContainerBuilder $ container , array $ config ): string
29
129
{
30
130
$ factoryId = sprintf ('enqueue.transport.%s.connection_factory ' , $ this ->getName ());
0 commit comments