-
Notifications
You must be signed in to change notification settings - Fork 440
/
Copy pathSqsTransportFactory.php
105 lines (89 loc) · 3.08 KB
/
SqsTransportFactory.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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
<?php
namespace Enqueue\Sqs\Symfony;
use Enqueue\Sqs\Client\SqsDriver;
use Enqueue\Sqs\SqsConnectionFactory;
use Enqueue\Sqs\SqsContext;
use Enqueue\Symfony\DriverFactoryInterface;
use Enqueue\Symfony\TransportFactoryInterface;
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\DependencyInjection\Reference;
class SqsTransportFactory implements TransportFactoryInterface, DriverFactoryInterface
{
/**
* @var string
*/
private $name;
/**
* @param string $name
*/
public function __construct($name = 'sqs')
{
$this->name = $name;
}
/**
* {@inheritdoc}
*/
public function addConfiguration(ArrayNodeDefinition $builder)
{
$builder
->children()
->scalarNode('key')->defaultNull()->end()
->scalarNode('secret')->defaultNull()->end()
->scalarNode('token')->defaultNull()->end()
->scalarNode('region')->isRequired()->end()
->integerNode('retries')->defaultValue(3)->end()
->scalarNode('version')->cannotBeEmpty()->defaultValue('2012-11-05')->end()
->booleanNode('lazy')
->defaultTrue()
->info('the connection will be performed as later as possible, if the option set to true')
->end()
;
}
/**
* {@inheritdoc}
*/
public function createConnectionFactory(ContainerBuilder $container, array $config)
{
$factory = new Definition(SqsConnectionFactory::class);
$factory->setArguments([$config]);
$factoryId = sprintf('enqueue.transport.%s.connection_factory', $this->getName());
$container->setDefinition($factoryId, $factory);
return $factoryId;
}
/**
* {@inheritdoc}
*/
public function createContext(ContainerBuilder $container, array $config)
{
$factoryId = sprintf('enqueue.transport.%s.connection_factory', $this->getName());
$context = new Definition(SqsContext::class);
$context->setFactory([new Reference($factoryId), 'createContext']);
$contextId = sprintf('enqueue.transport.%s.context', $this->getName());
$container->setDefinition($contextId, $context);
return $contextId;
}
/**
* {@inheritdoc}
*/
public function createDriver(ContainerBuilder $container, array $config)
{
$driver = new Definition(SqsDriver::class);
$driver->setArguments([
new Reference(sprintf('enqueue.transport.%s.context', $this->getName())),
new Reference('enqueue.client.config'),
new Reference('enqueue.client.meta.queue_meta_registry'),
]);
$driverId = sprintf('enqueue.client.%s.driver', $this->getName());
$container->setDefinition($driverId, $driver);
return $driverId;
}
/**
* {@inheritdoc}
*/
public function getName()
{
return $this->name;
}
}