44
55use Forumhouse \LaravelAmqp \Exception \AMQPException ;
66use Forumhouse \LaravelAmqp \Jobs \AMQPJob ;
7+ use Forumhouse \LaravelAmqp \Utility \ArrayUtil ;
78use Illuminate \Queue \Queue ;
89use PhpAmqpLib \Channel \AMQPChannel ;
910use PhpAmqpLib \Connection \AMQPConnection ;
@@ -211,7 +212,7 @@ protected function declareExchange($exchangeName, $exchangeType, array $exchange
211212 public function declareQueue ($ name )
212213 {
213214 $ queue = $ this ->getQueueName ($ name );
214- $ flags = array_replace ([
215+ $ flags = array_replace_recursive ([
215216 'queue ' => $ queue ,
216217 'passive ' => false ,
217218 'durable ' => false ,
@@ -220,7 +221,7 @@ public function declareQueue($name)
220221 'nowait ' => false ,
221222 'arguments ' => null ,
222223 'ticket ' => null ,
223- ], $ this ->queueFlags );
224+ ], $ this ->getQueueFlags ( $ name ) );
224225
225226 call_user_func_array ([$ this ->channel , 'queue_declare ' ], $ flags );
226227 }
@@ -238,7 +239,7 @@ public function declareDelayedQueue($destinationQueueName, $delay)
238239 $ destinationQueueName = $ this ->getQueueName ($ destinationQueueName );
239240 $ deferredQueueName = $ destinationQueueName . '_deferred_ ' . $ delay ;
240241
241- $ flags = array_replace ([
242+ $ flags = array_replace_recursive ([
242243 'queue ' => '' ,
243244 'passive ' => false ,
244245 'durable ' => false ,
@@ -247,7 +248,7 @@ public function declareDelayedQueue($destinationQueueName, $delay)
247248 'nowait ' => false ,
248249 'arguments ' => null ,
249250 'ticket ' => null ,
250- ], $ this ->queueFlags , [
251+ ], $ this ->getQueueFlags ( $ destinationQueueName , $ deferredQueueName , $ delay ) , [
251252 'queue ' => $ deferredQueueName ,
252253 'durable ' => true ,
253254 'arguments ' => [
@@ -277,4 +278,22 @@ protected function getQueueName($name)
277278 }
278279 return $ name ;
279280 }
281+
282+ /**
283+ * @param string $queueName
284+ * @param null|string $deferredQueueName
285+ * @param null|int $deferredQueueDelay
286+ *
287+ * @return array
288+ */
289+ protected function getQueueFlags ($ queueName , $ deferredQueueName = null , $ deferredQueueDelay = null )
290+ {
291+ $ result = ArrayUtil::arrayMapRecursive (function ($ value ) {
292+ return is_callable ($ value ) ? call_user_func_array ($ value , func_get_args ()) : $ value ;
293+ }, $ this ->queueFlags );
294+
295+ $ result = ArrayUtil::removeNullsRecursive ($ result );
296+
297+ return $ result ;
298+ }
280299}
0 commit comments