diff --git a/src/Illuminate/Queue/BeanstalkdQueue.php b/src/Illuminate/Queue/BeanstalkdQueue.php index 24dc9c0b4f8f..d6b0761d4c1e 100755 --- a/src/Illuminate/Queue/BeanstalkdQueue.php +++ b/src/Illuminate/Queue/BeanstalkdQueue.php @@ -148,7 +148,7 @@ public function deleteMessage($queue, $id) */ public function getQueue($queue) { - return $queue ?: $this->default; + return $this->getQueuePrefix().($queue ?: $this->default); } /** diff --git a/src/Illuminate/Queue/Console/ListenCommand.php b/src/Illuminate/Queue/Console/ListenCommand.php index 3d6d1b0edc73..481a2403a49b 100755 --- a/src/Illuminate/Queue/Console/ListenCommand.php +++ b/src/Illuminate/Queue/Console/ListenCommand.php @@ -79,9 +79,11 @@ protected function getQueue($connection) { $connection = $connection ?: $this->laravel['config']['queue.default']; - return $this->input->getOption('queue') ?: $this->laravel['config']->get( + $queue = $this->input->getOption('queue') ?: $this->laravel['config']->get( "queue.connections.{$connection}.queue", 'default' ); + + return $this->laravel['config']->get('queue.prefix', null).$queue; } /** diff --git a/src/Illuminate/Queue/Console/WorkCommand.php b/src/Illuminate/Queue/Console/WorkCommand.php index c430881d8477..a87744371248 100644 --- a/src/Illuminate/Queue/Console/WorkCommand.php +++ b/src/Illuminate/Queue/Console/WorkCommand.php @@ -196,9 +196,11 @@ protected function logFailedJob(JobFailed $event) */ protected function getQueue($connection) { - return $this->option('queue') ?: $this->laravel['config']->get( + $queue = $this->option('queue') ?: $this->laravel['config']->get( "queue.connections.{$connection}.queue", 'default' ); + + return $this->laravel['config']->get('queue.prefix', null).$queue; } /** diff --git a/src/Illuminate/Queue/DatabaseQueue.php b/src/Illuminate/Queue/DatabaseQueue.php index 51a30a7df788..897d0bb8f4ea 100644 --- a/src/Illuminate/Queue/DatabaseQueue.php +++ b/src/Illuminate/Queue/DatabaseQueue.php @@ -308,7 +308,7 @@ public function deleteReserved($queue, $id) */ protected function getQueue($queue) { - return $queue ?: $this->default; + return $this->getQueuePrefix().($queue ?: $this->default); } /** diff --git a/src/Illuminate/Queue/Queue.php b/src/Illuminate/Queue/Queue.php index c53dcf355392..1901be1c82e3 100755 --- a/src/Illuminate/Queue/Queue.php +++ b/src/Illuminate/Queue/Queue.php @@ -29,6 +29,13 @@ abstract class Queue */ protected $connectionName; + /** + * The queue prefix. + * + * @var string + */ + protected $queuePrefix; + /** * Push a new job onto the queue. * @@ -188,4 +195,27 @@ public function setContainer(Container $container) { $this->container = $container; } + + /** + * Set the queue prefix. + * + * @param string $prefix + * @return $this + */ + public function setQueuePrefix($prefix = null) + { + $this->queuePrefix = $prefix; + + return $this; + } + + /** + * Get the queue prefix. + * + * @return string + */ + public function getQueuePrefix() + { + return $this->queuePrefix; + } } diff --git a/src/Illuminate/Queue/QueueManager.php b/src/Illuminate/Queue/QueueManager.php index b8fcb3c91b0b..2938a655d655 100755 --- a/src/Illuminate/Queue/QueueManager.php +++ b/src/Illuminate/Queue/QueueManager.php @@ -152,7 +152,8 @@ protected function resolve($name) return $this->getConnector($config['driver']) ->connect($config) - ->setConnectionName($name); + ->setConnectionName($name) + ->setQueuePrefix($this->getQueuePrefix()); } /** @@ -232,6 +233,16 @@ public function setDefaultDriver($name) $this->app['config']['queue.default'] = $name; } + /** + * Get the name of the queue prefix. + * + * @return string + */ + public function getQueuePrefix() + { + return $this->app['config']->get('queue.prefix'); + } + /** * Get the full name for the given connection. * diff --git a/src/Illuminate/Queue/RedisQueue.php b/src/Illuminate/Queue/RedisQueue.php index 9dad2419fdfd..6cb489b1e4d8 100644 --- a/src/Illuminate/Queue/RedisQueue.php +++ b/src/Illuminate/Queue/RedisQueue.php @@ -256,7 +256,7 @@ protected function getRandomId() */ protected function getQueue($queue) { - return 'queues:'.($queue ?: $this->default); + return 'queues:'.$this->getQueuePrefix().($queue ?: $this->default); } /** diff --git a/src/Illuminate/Queue/SqsQueue.php b/src/Illuminate/Queue/SqsQueue.php index dc85d9771a60..8388fd21606b 100755 --- a/src/Illuminate/Queue/SqsQueue.php +++ b/src/Illuminate/Queue/SqsQueue.php @@ -137,7 +137,7 @@ public function pop($queue = null) */ public function getQueue($queue) { - $queue = $queue ?: $this->default; + $queue = $this->getQueuePrefix().($queue ?: $this->default); return filter_var($queue, FILTER_VALIDATE_URL) === false ? rtrim($this->prefix, '/').'/'.$queue : $queue; diff --git a/tests/Queue/QueueManagerTest.php b/tests/Queue/QueueManagerTest.php index daaac410eccc..6cd35ecb532b 100755 --- a/tests/Queue/QueueManagerTest.php +++ b/tests/Queue/QueueManagerTest.php @@ -4,6 +4,7 @@ use Mockery as m; use PHPUnit\Framework\TestCase; +use Illuminate\Config\Repository; use Illuminate\Queue\QueueManager; class QueueManagerTest extends TestCase @@ -15,11 +16,13 @@ public function tearDown() public function testDefaultConnectionCanBeResolved() { + $config = new Repository([ + 'queue.default' => 'sync', + 'queue.connections.sync' => ['driver' => 'sync'], + ]); + $app = [ - 'config' => [ - 'queue.default' => 'sync', - 'queue.connections.sync' => ['driver' => 'sync'], - ], + 'config' => $config, 'encrypter' => $encrypter = m::mock('Illuminate\Contracts\Encryption\Encrypter'), ]; @@ -27,6 +30,7 @@ public function testDefaultConnectionCanBeResolved() $connector = m::mock('StdClass'); $queue = m::mock('StdClass'); $queue->shouldReceive('setConnectionName')->once()->with('sync')->andReturnSelf(); + $queue->shouldReceive('setQueuePrefix')->once()->with('')->andReturnSelf(); $connector->shouldReceive('connect')->once()->with(['driver' => 'sync'])->andReturn($queue); $manager->addConnector('sync', function () use ($connector) { return $connector; @@ -38,11 +42,13 @@ public function testDefaultConnectionCanBeResolved() public function testOtherConnectionCanBeResolved() { + $config = new Repository([ + 'queue.default' => 'sync', + 'queue.connections.foo' => ['driver' => 'bar'], + ]); + $app = [ - 'config' => [ - 'queue.default' => 'sync', - 'queue.connections.foo' => ['driver' => 'bar'], - ], + 'config' => $config, 'encrypter' => $encrypter = m::mock('Illuminate\Contracts\Encryption\Encrypter'), ]; @@ -50,6 +56,7 @@ public function testOtherConnectionCanBeResolved() $connector = m::mock('StdClass'); $queue = m::mock('StdClass'); $queue->shouldReceive('setConnectionName')->once()->with('foo')->andReturnSelf(); + $queue->shouldReceive('setQueuePrefix')->once()->with('')->andReturnSelf(); $connector->shouldReceive('connect')->once()->with(['driver' => 'bar'])->andReturn($queue); $manager->addConnector('bar', function () use ($connector) { return $connector; @@ -61,10 +68,12 @@ public function testOtherConnectionCanBeResolved() public function testNullConnectionCanBeResolved() { + $config = new Repository([ + 'queue.default' => 'null', + ]); + $app = [ - 'config' => [ - 'queue.default' => 'null', - ], + 'config' => $config, 'encrypter' => $encrypter = m::mock('Illuminate\Contracts\Encryption\Encrypter'), ]; @@ -72,6 +81,7 @@ public function testNullConnectionCanBeResolved() $connector = m::mock('StdClass'); $queue = m::mock('StdClass'); $queue->shouldReceive('setConnectionName')->once()->with('null')->andReturnSelf(); + $queue->shouldReceive('setQueuePrefix')->once()->with('')->andReturnSelf(); $connector->shouldReceive('connect')->once()->with(['driver' => 'null'])->andReturn($queue); $manager->addConnector('null', function () use ($connector) { return $connector;