|
2 | 2 |
|
3 | 3 | namespace Enqueue\SimpleClient;
|
4 | 4 |
|
| 5 | +use Enqueue\AmqpBunny\AmqpConnectionFactory as AmqpBunnyConnectionFactory; |
| 6 | +use Enqueue\AmqpExt\AmqpConnectionFactory as AmqpExtConnectionFactory; |
| 7 | +use Enqueue\AmqpLib\AmqpConnectionFactory as AmqpLibConnectionFactory; |
5 | 8 | use Enqueue\Client\ArrayProcessorRegistry;
|
6 | 9 | use Enqueue\Client\Config;
|
7 | 10 | use Enqueue\Client\DelegateProcessor;
|
|
13 | 16 | use Enqueue\Consumption\CallbackProcessor;
|
14 | 17 | use Enqueue\Consumption\ExtensionInterface;
|
15 | 18 | use Enqueue\Consumption\QueueConsumer;
|
| 19 | +use Enqueue\Dbal\DbalConnectionFactory; |
16 | 20 | use Enqueue\Dbal\Symfony\DbalTransportFactory;
|
| 21 | +use Enqueue\Fs\FsConnectionFactory; |
17 | 22 | use Enqueue\Fs\Symfony\FsTransportFactory;
|
| 23 | +use Enqueue\Gps\GpsConnectionFactory; |
| 24 | +use Enqueue\Gps\Symfony\GpsTransportFactory; |
| 25 | +use Enqueue\Null\Symfony\NullTransportFactory; |
| 26 | +use Enqueue\Redis\RedisConnectionFactory; |
18 | 27 | use Enqueue\Redis\Symfony\RedisTransportFactory;
|
19 | 28 | use Enqueue\Rpc\Promise;
|
| 29 | +use Enqueue\Sqs\SqsConnectionFactory; |
20 | 30 | use Enqueue\Sqs\Symfony\SqsTransportFactory;
|
| 31 | +use Enqueue\Stomp\StompConnectionFactory; |
21 | 32 | use Enqueue\Stomp\Symfony\RabbitMqStompTransportFactory;
|
22 | 33 | use Enqueue\Stomp\Symfony\StompTransportFactory;
|
23 | 34 | use Enqueue\Symfony\AmqpTransportFactory;
|
24 | 35 | use Enqueue\Symfony\DefaultTransportFactory;
|
| 36 | +use Enqueue\Symfony\MissingTransportFactory; |
25 | 37 | use Enqueue\Symfony\RabbitMqAmqpTransportFactory;
|
26 | 38 | use Interop\Queue\PsrContext;
|
27 | 39 | use Interop\Queue\PsrProcessor;
|
@@ -283,26 +295,61 @@ private function buildContainer($config, ContainerBuilder $container)
|
283 | 295 | */
|
284 | 296 | private function buildContainerExtension()
|
285 | 297 | {
|
286 |
| - $map = [ |
287 |
| - 'default' => DefaultTransportFactory::class, |
288 |
| - 'dbal' => DbalTransportFactory::class, |
289 |
| - 'fs' => FsTransportFactory::class, |
290 |
| - 'redis' => RedisTransportFactory::class, |
291 |
| - 'stomp' => StompTransportFactory::class, |
292 |
| - 'rabbitmq_stomp' => RabbitMqStompTransportFactory::class, |
293 |
| - 'sqs' => SqsTransportFactory::class, |
294 |
| - ]; |
295 |
| - |
296 | 298 | $extension = new SimpleClientContainerExtension();
|
297 | 299 |
|
298 |
| - foreach ($map as $name => $factoryClass) { |
299 |
| - if (class_exists($factoryClass)) { |
300 |
| - $extension->addTransportFactory(new $factoryClass($name)); |
301 |
| - } |
| 300 | + $extension->addTransportFactory(new DefaultTransportFactory('default')); |
| 301 | + $extension->addTransportFactory(new NullTransportFactory('null')); |
| 302 | + |
| 303 | + if (class_exists(StompConnectionFactory::class)) { |
| 304 | + $extension->addTransportFactory(new StompTransportFactory('stomp')); |
| 305 | + $extension->addTransportFactory(new RabbitMqStompTransportFactory('rabbitmq_stomp')); |
| 306 | + } else { |
| 307 | + $extension->addTransportFactory(new MissingTransportFactory('stomp', ['enqueue/stomp'])); |
| 308 | + $extension->addTransportFactory(new MissingTransportFactory('rabbitmq_stomp', ['enqueue/stomp'])); |
302 | 309 | }
|
303 | 310 |
|
304 |
| - $extension->addTransportFactory(new AmqpTransportFactory('amqp')); |
305 |
| - $extension->addTransportFactory(new RabbitMqAmqpTransportFactory('rabbitmq_amqp')); |
| 311 | + if ( |
| 312 | + class_exists(AmqpBunnyConnectionFactory::class) || |
| 313 | + class_exists(AmqpExtConnectionFactory::class) || |
| 314 | + class_exists(AmqpLibConnectionFactory::class) |
| 315 | + ) { |
| 316 | + $extension->addTransportFactory(new AmqpTransportFactory('amqp')); |
| 317 | + $extension->addTransportFactory(new RabbitMqAmqpTransportFactory('rabbitmq_amqp')); |
| 318 | + } else { |
| 319 | + $amppPackages = ['enqueue/amqp-ext', 'enqueue/amqp-bunny', 'enqueue/amqp-lib']; |
| 320 | + $extension->addTransportFactory(new MissingTransportFactory('amqp', $amppPackages)); |
| 321 | + $extension->addTransportFactory(new MissingTransportFactory('rabbitmq_amqp', $amppPackages)); |
| 322 | + } |
| 323 | + |
| 324 | + if (class_exists(FsConnectionFactory::class)) { |
| 325 | + $extension->addTransportFactory(new FsTransportFactory('fs')); |
| 326 | + } else { |
| 327 | + $extension->addTransportFactory(new MissingTransportFactory('fs', ['enqueue/fs'])); |
| 328 | + } |
| 329 | + |
| 330 | + if (class_exists(RedisConnectionFactory::class)) { |
| 331 | + $extension->addTransportFactory(new RedisTransportFactory('redis')); |
| 332 | + } else { |
| 333 | + $extension->addTransportFactory(new MissingTransportFactory('redis', ['enqueue/redis'])); |
| 334 | + } |
| 335 | + |
| 336 | + if (class_exists(DbalConnectionFactory::class)) { |
| 337 | + $extension->addTransportFactory(new DbalTransportFactory('dbal')); |
| 338 | + } else { |
| 339 | + $extension->addTransportFactory(new MissingTransportFactory('dbal', ['enqueue/dbal'])); |
| 340 | + } |
| 341 | + |
| 342 | + if (class_exists(SqsConnectionFactory::class)) { |
| 343 | + $extension->addTransportFactory(new SqsTransportFactory('sqs')); |
| 344 | + } else { |
| 345 | + $extension->addTransportFactory(new MissingTransportFactory('sqs', ['enqueue/sqs'])); |
| 346 | + } |
| 347 | + |
| 348 | + if (class_exists(GpsConnectionFactory::class)) { |
| 349 | + $extension->addTransportFactory(new GpsTransportFactory('gps')); |
| 350 | + } else { |
| 351 | + $extension->addTransportFactory(new MissingTransportFactory('gps', ['enqueue/gps'])); |
| 352 | + } |
306 | 353 |
|
307 | 354 | return $extension;
|
308 | 355 | }
|
|
0 commit comments