Skip to content

Commit a5f772e

Browse files
author
Ratko Rudic
committed
Adds optional arguments to queue_declare().
RabbitMQ queues can be created with additional arguments. If client connects to a queue that was created with these additional arguments an exception is thrown: PRECONDITION_FAILED - inequivalent arg 'x-max-length' for queue 'queue_name' in vhost '/': received none but current is the value '10000000' of type 'long'
1 parent f862811 commit a5f772e

File tree

4 files changed

+19
-8
lines changed

4 files changed

+19
-8
lines changed

config/rabbitmq.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
'durable' => env('RABBITMQ_QUEUE_DURABLE', true),
4040
'exclusive' => env('RABBITMQ_QUEUE_EXCLUSIVE', false),
4141
'auto_delete' => env('RABBITMQ_QUEUE_AUTODELETE', false),
42+
'arguments' => env('RABBITMQ_QUEUE_ARGUMENTS', false),
4243
],
4344
'exchange_params' => [
4445
'name' => env('RABBITMQ_EXCHANGE_NAME', null),

src/Queue/RabbitMQQueue.php

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,9 @@ private function declareQueue($name)
229229
$this->configQueue['passive'],
230230
$this->configQueue['durable'],
231231
$this->configQueue['exclusive'],
232-
$this->configQueue['auto_delete']
232+
$this->configQueue['auto_delete'],
233+
false,
234+
$this->configQueue['arguments']
233235
);
234236

235237
// bind queue to the exchange
@@ -268,18 +270,20 @@ private function declareDelayedQueue($destination, $delay)
268270

269271
// declare queue
270272
if (!in_array($name, $this->declaredQueues, true)) {
273+
$queueArguments = array_merge([
274+
'x-dead-letter-exchange' => $destinationExchange,
275+
'x-dead-letter-routing-key' => $destination,
276+
'x-message-ttl' => $delay * 1000,
277+
], (array)$this->configQueue['arguments']);
278+
271279
$this->channel->queue_declare(
272280
$name,
273281
$this->configQueue['passive'],
274282
$this->configQueue['durable'],
275283
$this->configQueue['exclusive'],
276284
$this->configQueue['auto_delete'],
277285
false,
278-
new AMQPTable([
279-
'x-dead-letter-exchange' => $destinationExchange,
280-
'x-dead-letter-routing-key' => $destination,
281-
'x-message-ttl' => $delay * 1000,
282-
])
286+
new AMQPTable($queueArguments)
283287
);
284288
}
285289

tests/RabbitMQConnectorTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ public function test_connect()
2525
'durable' => true,
2626
'exclusive' => false,
2727
'auto_delete' => false,
28+
'arguments' => false,
2829
],
2930
'exchange_params' => [
3031
'name' => null,

tests/RabbitMQQueueTest.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ public function setUp()
3131
'durable' => true,
3232
'exclusive' => false,
3333
'auto_delete' => false,
34+
'arguments' => false,
3435
],
3536
'exchange_params' => [
3637
'name' => 'exchange_name',
@@ -80,7 +81,9 @@ public function test_push()
8081
$this->config['queue_params']['passive'],
8182
$this->config['queue_params']['durable'],
8283
$this->config['queue_params']['exclusive'],
83-
$this->config['queue_params']['auto_delete']
84+
$this->config['queue_params']['auto_delete'],
85+
false,
86+
$this->config['queue_params']['arguments']
8487
)->once();
8588

8689
$this->channel->shouldReceive('queue_bind')->with(
@@ -150,7 +153,9 @@ public function test_pop()
150153
$this->config['queue_params']['passive'],
151154
$this->config['queue_params']['durable'],
152155
$this->config['queue_params']['exclusive'],
153-
$this->config['queue_params']['auto_delete']
156+
$this->config['queue_params']['auto_delete'],
157+
false,
158+
$this->config['queue_params']['arguments']
154159
)->once();
155160

156161
$this->channel->shouldReceive('queue_bind')->with(

0 commit comments

Comments
 (0)