3
3
namespace Enqueue \Bundle \DependencyInjection \Compiler ;
4
4
5
5
use Enqueue \Client \CommandSubscriberInterface ;
6
- use Enqueue \Client \Config ;
7
6
use Enqueue \Client \TopicSubscriberInterface ;
8
7
use Symfony \Component \DependencyInjection \ContainerBuilder ;
9
8
use Symfony \Component \DependencyInjection \Exception \ParameterNotFoundException ;
@@ -31,47 +30,45 @@ protected function extractSubscriptions(ContainerBuilder $container, $processorS
31
30
}
32
31
};
33
32
34
- $ processorClass = $ container ->getDefinition ($ processorServiceId )->getClass ();
35
- if (false == class_exists ($ processorClass )) {
36
- throw new \LogicException (sprintf ('The class "%s" could not be found. ' , $ processorClass ));
33
+ $ processorDefinition = $ container ->getDefinition ($ processorServiceId );
34
+ $ processorClass = $ processorDefinition ->getClass ();
35
+ if (false == $ processorDefinition ->getFactory () && false == class_exists ($ processorClass )) {
36
+ throw new \LogicException (sprintf ('The processor class "%s" could not be found. ' , $ processorClass ));
37
37
}
38
38
39
39
$ defaultQueueName = $ resolve ($ container ->getParameter ('enqueue.client.default_queue_name ' ));
40
- $ subscriptionPrototype = [
41
- 'topicName ' => null ,
42
- 'queueName ' => null ,
43
- 'queueNameHardcoded ' => false ,
44
- 'processorName ' => null ,
45
- 'exclusive ' => false ,
46
- ];
47
40
48
41
$ data = [];
49
- if (is_subclass_of ($ processorClass , CommandSubscriberInterface::class)) {
42
+ if ($ processorClass && is_subclass_of ($ processorClass , CommandSubscriberInterface::class)) {
50
43
/** @var CommandSubscriberInterface $processorClass */
51
44
$ params = $ processorClass ::getSubscribedCommand ();
52
45
if (is_string ($ params )) {
53
46
if (empty ($ params )) {
54
- throw new \LogicException ('The processor name (it is also the command name) must not be empty. ' );
47
+ throw new \LogicException ('The command name must not be empty. ' );
55
48
}
56
49
57
50
$ data [] = [
58
- 'topicName ' => Config:: COMMAND_TOPIC ,
51
+ 'commandName ' => $ params ,
59
52
'queueName ' => $ defaultQueueName ,
60
53
'queueNameHardcoded ' => false ,
61
- 'processorName ' => $ params ,
54
+ 'processorName ' => $ processorServiceId ,
55
+ 'exclusive ' => false ,
62
56
];
63
57
} elseif (is_array ($ params )) {
64
- $ params = array_replace ($ subscriptionPrototype , $ params );
65
- if (false == $ processorName = $ resolve ($ params ['processorName ' ])) {
66
- throw new \LogicException ('The processor name (it is also the command name) must not be empty. ' );
58
+ if (empty ($ params ['commandName ' ])) {
59
+ throw new \LogicException ('The commandName must be set. ' );
60
+ }
61
+
62
+ if (false == $ commandName = $ resolve ($ params ['commandName ' ])) {
63
+ throw new \LogicException ('The commandName must not be empty. ' );
67
64
}
68
65
69
66
$ data [] = [
70
- 'topicName ' => Config:: COMMAND_TOPIC ,
71
- 'queueName ' => $ resolve ($ params ['queueName ' ]) ?: $ defaultQueueName ,
72
- 'queueNameHardcoded ' => $ resolve ( $ params ['queueNameHardcoded ' ]) ,
73
- 'processorName ' => $ processorName ,
74
- 'exclusive ' => array_key_exists ( ' exclusive ' , $ params) ? $ params ['exclusive ' ] : false ,
67
+ 'commandName ' => $ commandName ,
68
+ 'queueName ' => $ resolve ($ params ['queueName ' ] ?? $ defaultQueueName) ,
69
+ 'queueNameHardcoded ' => $ params ['queueNameHardcoded ' ] ?? false ,
70
+ 'processorName ' => $ params [ ' processorName ' ] ?? $ commandName ,
71
+ 'exclusive ' => $ params ['exclusive ' ] ?? false ,
75
72
];
76
73
} else {
77
74
throw new \LogicException (sprintf (
@@ -81,7 +78,7 @@ protected function extractSubscriptions(ContainerBuilder $container, $processorS
81
78
}
82
79
}
83
80
84
- if (is_subclass_of ($ processorClass , TopicSubscriberInterface::class)) {
81
+ if ($ processorClass && is_subclass_of ($ processorClass , TopicSubscriberInterface::class)) {
85
82
/** @var TopicSubscriberInterface $processorClass */
86
83
$ topics = $ processorClass ::getSubscribedTopics ();
87
84
if (!is_array ($ topics )) {
@@ -99,15 +96,15 @@ protected function extractSubscriptions(ContainerBuilder $container, $processorS
99
96
'queueName ' => $ defaultQueueName ,
100
97
'queueNameHardcoded ' => false ,
101
98
'processorName ' => $ processorServiceId ,
99
+ 'exclusive ' => false ,
102
100
];
103
101
} elseif (is_array ($ params )) {
104
- $ params = array_replace ($ subscriptionPrototype , $ params );
105
-
106
102
$ data [] = [
107
103
'topicName ' => $ topicName ,
108
- 'queueName ' => $ resolve ($ params ['queueName ' ]) ?: $ defaultQueueName ,
109
- 'queueNameHardcoded ' => $ resolve ( $ params ['queueNameHardcoded ' ]) ,
104
+ 'queueName ' => $ resolve ($ params ['queueName ' ] ?? $ defaultQueueName) ,
105
+ 'queueNameHardcoded ' => $ params ['queueNameHardcoded ' ] ?? false ,
110
106
'processorName ' => $ resolve ($ params ['processorName ' ]) ?: $ processorServiceId ,
107
+ 'exclusive ' => false ,
111
108
];
112
109
} else {
113
110
throw new \LogicException (sprintf (
@@ -120,24 +117,37 @@ protected function extractSubscriptions(ContainerBuilder $container, $processorS
120
117
}
121
118
122
119
if (false == (
120
+ $ processorClass ||
123
121
is_subclass_of ($ processorClass , CommandSubscriberInterface::class) ||
124
122
is_subclass_of ($ processorClass , TopicSubscriberInterface::class)
125
123
)) {
126
124
foreach ($ tagAttributes as $ tagAttribute ) {
127
- $ tagAttribute = array_replace ($ subscriptionPrototype , $ tagAttribute );
125
+ if (empty ($ tagAttribute ['commandName ' ]) && empty ($ tagAttribute ['topicName ' ])) {
126
+ throw new \LogicException ('Either commandName or topicName attribute must be set ' );
127
+ }
128
+
129
+ $ topicName = $ tagAttribute ['topicName ' ] ?? null ;
130
+ $ commandName = $ tagAttribute ['commandName ' ] ?? null ;
128
131
129
- if (false == $ tagAttribute ['topicName ' ]) {
130
- throw new \LogicException (sprintf ('Topic name is not set on message processor tag but it is required. Service %s ' , $ processorServiceId ));
132
+ if ($ topicName ) {
133
+ $ data [] = [
134
+ 'topicName ' => $ resolve ($ tagAttribute ['topicName ' ]),
135
+ 'queueName ' => $ resolve ($ tagAttribute ['queueName ' ] ?? $ defaultQueueName ),
136
+ 'queueNameHardcoded ' => $ tagAttribute ['queueNameHardcoded ' ],
137
+ 'processorName ' => $ resolve ($ tagAttribute ['processorName ' ] ?? $ processorServiceId ),
138
+ 'exclusive ' => false ,
139
+ ];
131
140
}
132
141
133
- $ data [] = [
134
- 'topicName ' => $ resolve ($ tagAttribute ['topicName ' ]),
135
- 'queueName ' => $ resolve ($ tagAttribute ['queueName ' ]) ?: $ defaultQueueName ,
136
- 'queueNameHardcoded ' => $ resolve ($ tagAttribute ['queueNameHardcoded ' ]),
137
- 'processorName ' => $ resolve ($ tagAttribute ['processorName ' ]) ?: $ processorServiceId ,
138
- 'exclusive ' => Config::COMMAND_TOPIC == $ resolve ($ tagAttribute ['topicName ' ]) &&
139
- array_key_exists ('exclusive ' , $ tagAttribute ) ? $ tagAttribute ['exclusive ' ] : false ,
140
- ];
142
+ if ($ commandName ) {
143
+ $ data [] = [
144
+ 'commandName ' => $ resolve ($ tagAttribute ['commandName ' ]),
145
+ 'queueName ' => $ resolve ($ tagAttribute ['queueName ' ] ?? $ defaultQueueName ),
146
+ 'queueNameHardcoded ' => $ tagAttribute ['queueNameHardcoded ' ],
147
+ 'processorName ' => $ resolve ($ tagAttribute ['processorName ' ] ?? $ processorServiceId ),
148
+ 'exclusive ' => $ tagAttribute ['exclusive ' ] ?? false ,
149
+ ];
150
+ }
141
151
}
142
152
}
143
153
0 commit comments