|
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