Skip to content

Commit 488c5d8

Browse files
authored
Merge pull request #198 from php-enqueue/dbal-add-priority-support
[dbal] add priority support on transport level.
2 parents 3772554 + 6e16be8 commit 488c5d8

4 files changed

+78
-99
lines changed

pkg/dbal/DbalConsumer.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ protected function receiveMessage()
176176
->where('queue = :queue')
177177
->andWhere('(delayed_until IS NULL OR delayed_until <= :delayedUntil)')
178178
->orderBy('priority', 'desc')
179-
->addOrderBy('id', 'asc')
179+
->addOrderBy('id', 'desc')
180180
->setMaxResults(1)
181181
;
182182

pkg/dbal/DbalProducer.php

+15-7
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@
1313

1414
class DbalProducer implements PsrProducer
1515
{
16+
/**
17+
* @var int|null
18+
*/
19+
private $priority;
20+
1621
/**
1722
* @var DbalContext
1823
*/
@@ -29,14 +34,19 @@ public function __construct(DbalContext $context)
2934
/**
3035
* {@inheritdoc}
3136
*
32-
* @param PsrDestination $destination
33-
* @param PsrMessage $message
37+
* @param DbalDestination $destination
38+
* @param DbalMessage $message
3439
*
3540
* @throws Exception
3641
*/
3742
public function send(PsrDestination $destination, PsrMessage $message)
3843
{
3944
InvalidDestinationException::assertDestinationInstanceOf($destination, DbalDestination::class);
45+
InvalidMessageException::assertMessageInstanceOf($message, DbalMessage::class);
46+
47+
if (null !== $this->priority && null === $message->getPriority()) {
48+
$message->setPriority($this->priority);
49+
}
4050

4151
$body = $message->getBody();
4252
if (is_scalar($body) || null === $body) {
@@ -111,19 +121,17 @@ public function getDeliveryDelay()
111121
*/
112122
public function setPriority($priority)
113123
{
114-
if (null === $priority) {
115-
return;
116-
}
124+
$this->priority = $priority;
117125

118-
throw new \LogicException('Not implemented');
126+
return $this;
119127
}
120128

121129
/**
122130
* {@inheritdoc}
123131
*/
124132
public function getPriority()
125133
{
126-
return null;
134+
return $this->priority;
127135
}
128136

129137
/**

pkg/dbal/Tests/DbalSendPriorityMessagesTest.php

-91
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
<?php
2+
3+
namespace Enqueue\Dbal\Tests\Spec;
4+
5+
use Enqueue\Dbal\DbalConnectionFactory;
6+
use Enqueue\Dbal\DbalDestination;
7+
use Enqueue\Dbal\DbalMessage;
8+
use Interop\Queue\PsrContext;
9+
use Interop\Queue\Spec\SendAndReceivePriorityMessagesFromQueueSpec;
10+
11+
/**
12+
* @group functional
13+
*/
14+
class DbalSendAndReceivePriorityMessagesFromQueueTest extends SendAndReceivePriorityMessagesFromQueueSpec
15+
{
16+
/**
17+
* @return PsrContext
18+
*/
19+
protected function createContext()
20+
{
21+
$factory = new DbalConnectionFactory([
22+
'lazy' => true,
23+
'connection' => [
24+
'dbname' => getenv('SYMFONY__DB__NAME'),
25+
'user' => getenv('SYMFONY__DB__USER'),
26+
'password' => getenv('SYMFONY__DB__PASSWORD'),
27+
'host' => getenv('SYMFONY__DB__HOST'),
28+
'port' => getenv('SYMFONY__DB__PORT'),
29+
'driver' => getenv('SYMFONY__DB__DRIVER'),
30+
],
31+
]);
32+
33+
$context = $factory->createContext();
34+
$context->createDataBaseTable();
35+
36+
return $context;
37+
}
38+
39+
/**
40+
* {@inheritdoc}
41+
*
42+
* @return DbalMessage
43+
*/
44+
protected function createMessage(PsrContext $context, $priority)
45+
{
46+
/** @var DbalMessage $message */
47+
$message = $context->createMessage('priority'.$priority);
48+
$message->setPriority($priority);
49+
50+
return $message;
51+
}
52+
53+
/**
54+
* {@inheritdoc}
55+
*
56+
* @return DbalDestination
57+
*/
58+
protected function createQueue(PsrContext $context, $queueName)
59+
{
60+
return parent::createQueue($context, $queueName.time());
61+
}
62+
}

0 commit comments

Comments
 (0)