-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathDelayStrategyTransportFactoryTrait.php
36 lines (28 loc) · 1.48 KB
/
DelayStrategyTransportFactoryTrait.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php
declare(strict_types=1);
namespace Enqueue\AmqpTools;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Reference;
trait DelayStrategyTransportFactoryTrait
{
public function registerDelayStrategy(ContainerBuilder $container, array $config, string $factoryId, string $factoryName): void
{
if ($config['delay_strategy']) {
$factory = $container->getDefinition($factoryId);
if (false == (is_a($factory->getClass(), DelayStrategyAware::class, true) || $factory->getFactory())) {
throw new \LogicException('Connection factory does not support delays');
}
if ('dlx' === strtolower($config['delay_strategy'])) {
$delayId = sprintf('enqueue.client.%s.delay_strategy', $factoryName);
$container->register($delayId, RabbitMqDlxDelayStrategy::class);
$factory->addMethodCall('setDelayStrategy', [new Reference($delayId)]);
} elseif ('delayed_message_plugin' === strtolower($config['delay_strategy'])) {
$delayId = sprintf('enqueue.client.%s.delay_strategy', $factoryName);
$container->register($delayId, RabbitMqDelayPluginDelayStrategy::class);
$factory->addMethodCall('setDelayStrategy', [new Reference($delayId)]);
} else {
$factory->addMethodCall('setDelayStrategy', [new Reference($config['delay_strategy'])]);
}
}
}
}