8
8
use ContinuousPipe \Message \GooglePubSub \PubSubMessageProducer ;
9
9
use ContinuousPipe \Message \GooglePubSub \PubSubMessagePuller ;
10
10
use ContinuousPipe \Message \InMemory \ArrayMessagePuller ;
11
+ use ContinuousPipe \Message \Router \RoutedMessageProducer ;
11
12
use Google \Cloud \ServiceBuilder ;
12
13
use Symfony \Component \Config \FileLocator ;
13
14
use Symfony \Component \DependencyInjection \ContainerBuilder ;
@@ -26,13 +27,13 @@ public function load(array $configs, ContainerBuilder $container)
26
27
$ configuration = new Configuration ();
27
28
$ config = $ this ->processConfiguration ($ configuration , $ configs );
28
29
29
- $ loader = new Loader \XmlFileLoader ($ container , new FileLocator (__DIR__ . '/../Resources/config ' ));
30
+ $ loader = new Loader \XmlFileLoader ($ container , new FileLocator (__DIR__ . '/../Resources/config ' ));
30
31
31
32
if (isset ($ config ['simple_bus ' ])) {
32
33
$ loader ->load ('simple-bus.xml ' );
33
34
34
35
$ container ->getDefinition ('continuouspipe.message.simple_bus.producer ' )->replaceArgument (0 , new Reference (
35
- 'continuouspipe.message. ' . $ config ['simple_bus ' ]['connection ' ]. '.message_producer '
36
+ 'continuouspipe.message. ' . $ config ['simple_bus ' ]['connection ' ] . '.message_producer '
36
37
));
37
38
}
38
39
@@ -49,8 +50,7 @@ public function load(array $configs, ContainerBuilder $container)
49
50
50
51
$ container
51
52
->getDefinition ('continuouspipe.message.command.pull_and_consumer ' )
52
- ->replaceArgument (0 , new Reference ('continuouspipe.message. ' .$ config ['command ' ]['connection ' ].'.message_puller ' ))
53
- ;
53
+ ->replaceArgument (0 , new Reference ('continuouspipe.message. ' . $ config ['command ' ]['connection ' ] . '.message_puller ' ));
54
54
}
55
55
56
56
$ drivers = [];
@@ -61,7 +61,7 @@ public function load(array $configs, ContainerBuilder $container)
61
61
}
62
62
63
63
foreach ($ drivers as $ driver ) {
64
- if (file_exists ($ filePath = 'drivers/ ' . $ driver. '.xml ' )) {
64
+ if (file_exists ($ filePath = 'drivers/ ' . $ driver . '.xml ' )) {
65
65
$ loader ->load ($ filePath );
66
66
}
67
67
}
@@ -77,70 +77,104 @@ private function createConnection(ContainerBuilder $container, string $name, arr
77
77
{
78
78
$ driverConfiguration = $ configuration ['driver ' ];
79
79
80
- $ pullerName = ' continuouspipe.message. ' . $ name . ' .message_puller ' ;
81
- $ producerName = ' continuouspipe.message. ' . $ name . ' .message_producer ' ;
80
+ $ pullerName = $ this -> getConnectionPullerName ( $ name) ;
81
+ $ producerName = $ this -> getConnectionProducerName ( $ name) ;
82
82
83
83
if (array_key_exists ('direct ' , $ driverConfiguration )) {
84
- $ container ->setDefinition (
85
- $ pullerName ,
86
- new Definition (ArrayMessagePuller::class)
87
- );
88
-
89
- $ container ->setDefinition (
90
- $ producerName ,
91
- new Definition (FromProducerToConsumer::class, [
92
- new Reference ('continuouspipe.message.message_consumer ' ),
93
- new Reference ('jms_serializer ' ),
94
- ])
95
- );
96
-
97
- $ container ->setDefinition (
98
- $ producerName .'.delayed_messages_buffer ' ,
99
- (new Definition (DelayedMessagesBuffer::class, [
100
- new Reference ($ producerName .'.delayed_messages_buffer.inner ' ),
101
- ]))->setDecoratedService ($ producerName )
102
- );
103
- }
104
-
105
- if (array_key_exists ('google_pub_sub ' , $ driverConfiguration )) {
106
- $ container ->setDefinition (
107
- $ pullerName ,
108
- new Definition (PubSubMessagePuller::class, [
109
- new Reference ('jms_serializer ' ),
110
- new Reference ('logger ' ),
111
- $ driverConfiguration ['google_pub_sub ' ]['project_id ' ],
112
- $ driverConfiguration ['google_pub_sub ' ]['service_account_path ' ],
113
- $ driverConfiguration ['google_pub_sub ' ]['topic ' ],
114
- $ driverConfiguration ['google_pub_sub ' ]['subscription ' ]
115
- ])
116
- );
117
-
118
- $ container ->setDefinition (
119
- $ producerName .'.service_builder ' ,
120
- new Definition (ServiceBuilder::class, [
121
- [
122
- 'projectId ' => $ driverConfiguration ['google_pub_sub ' ]['project_id ' ],
123
- 'keyFilePath ' => $ driverConfiguration ['google_pub_sub ' ]['service_account_path ' ],
124
- ]
125
- ])
126
- );
127
-
128
- $ container ->setDefinition (
129
- $ producerName ,
130
- new Definition (PubSubMessageProducer::class, [
131
- new Reference ('jms_serializer ' ),
132
- new Reference ($ producerName .'.service_builder ' ),
133
- $ driverConfiguration ['google_pub_sub ' ]['topic ' ]
134
- ])
135
- );
84
+ $ this ->createDirectConnection ($ container , $ pullerName , $ producerName );
85
+ } elseif (array_key_exists ('google_pub_sub ' , $ driverConfiguration )) {
86
+ $ this ->createGooglePubSubConnection ($ container , $ pullerName , $ producerName , $ driverConfiguration );
87
+ } elseif (array_key_exists ('router ' , $ driverConfiguration )) {
88
+ $ this ->createRouterConnection ($ container , $ pullerName , $ producerName , $ driverConfiguration );
89
+ } else {
90
+ throw new \RuntimeException (sprintf (
91
+ 'Driver not found with the following configuration keys: %s ' ,
92
+ implode (', ' , array_keys ($ driverConfiguration ))
93
+ ));
136
94
}
137
95
138
96
if ($ configuration ['debug ' ]) {
139
- $ container ->setDefinition ($ producerName. '.traced ' , (new Definition (
97
+ $ container ->setDefinition ($ producerName . '.traced ' , (new Definition (
140
98
TracedMessageProducer::class, [
141
- new Reference ($ producerName. '.traced.inner ' )
99
+ new Reference ($ producerName . '.traced.inner ' )
142
100
]
143
101
))->setDecoratedService ($ producerName ));
144
102
}
145
103
}
104
+
105
+ private function createDirectConnection (ContainerBuilder $ container , string $ pullerName , string $ producerName )
106
+ {
107
+ $ container ->setDefinition (
108
+ $ pullerName ,
109
+ new Definition (ArrayMessagePuller::class)
110
+ );
111
+
112
+ $ container ->setDefinition (
113
+ $ producerName ,
114
+ new Definition (FromProducerToConsumer::class, [
115
+ new Reference ('continuouspipe.message.message_consumer ' ),
116
+ new Reference ('jms_serializer ' ),
117
+ ])
118
+ );
119
+
120
+ $ container ->setDefinition (
121
+ $ producerName . '.delayed_messages_buffer ' ,
122
+ (new Definition (DelayedMessagesBuffer::class, [
123
+ new Reference ($ producerName . '.delayed_messages_buffer.inner ' ),
124
+ ]))->setDecoratedService ($ producerName )
125
+ );
126
+ }
127
+
128
+ private function createGooglePubSubConnection (ContainerBuilder $ container , string $ pullerName , string $ producerName , array $ driverConfiguration )
129
+ {
130
+ $ container ->setDefinition (
131
+ $ pullerName ,
132
+ new Definition (PubSubMessagePuller::class, [
133
+ new Reference ('jms_serializer ' ),
134
+ new Reference ('logger ' ),
135
+ $ driverConfiguration ['google_pub_sub ' ]['project_id ' ],
136
+ $ driverConfiguration ['google_pub_sub ' ]['service_account_path ' ],
137
+ $ driverConfiguration ['google_pub_sub ' ]['topic ' ],
138
+ $ driverConfiguration ['google_pub_sub ' ]['subscription ' ]
139
+ ])
140
+ );
141
+
142
+ $ container ->setDefinition (
143
+ $ producerName . '.service_builder ' ,
144
+ new Definition (ServiceBuilder::class, [
145
+ [
146
+ 'projectId ' => $ driverConfiguration ['google_pub_sub ' ]['project_id ' ],
147
+ 'keyFilePath ' => $ driverConfiguration ['google_pub_sub ' ]['service_account_path ' ],
148
+ ]
149
+ ])
150
+ );
151
+
152
+ $ container ->setDefinition (
153
+ $ producerName ,
154
+ new Definition (PubSubMessageProducer::class, [
155
+ new Reference ('jms_serializer ' ),
156
+ new Reference ($ producerName . '.service_builder ' ),
157
+ $ driverConfiguration ['google_pub_sub ' ]['topic ' ]
158
+ ])
159
+ );
160
+ }
161
+
162
+ private function createRouterConnection (ContainerBuilder $ container , string $ pullerName , string $ producerName , array $ driverConfiguration )
163
+ {
164
+ $ container ->setDefinition ($ producerName , new Definition (RoutedMessageProducer::class, [
165
+ array_map (function (string $ connectionName ) {
166
+ return new Reference ($ this ->getConnectionProducerName ($ connectionName ));
167
+ }, $ driverConfiguration ['message_to_connection_mapping ' ]),
168
+ ]));
169
+ }
170
+
171
+ private function getConnectionPullerName (string $ name ): string
172
+ {
173
+ return 'continuouspipe.message. ' . $ name . '.message_puller ' ;
174
+ }
175
+
176
+ private function getConnectionProducerName (string $ name ): string
177
+ {
178
+ return 'continuouspipe.message. ' . $ name . '.message_producer ' ;
179
+ }
146
180
}
0 commit comments