Skip to content

Commit aeff8dd

Browse files
committed
Fixed losing message priority for dbal driver
1 parent 2b9c6ac commit aeff8dd

File tree

3 files changed

+48
-5
lines changed

3 files changed

+48
-5
lines changed

pkg/dbal/Client/DbalDriver.php

+29-1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,17 @@ class DbalDriver implements DriverInterface
3030
*/
3131
private $queueMetaRegistry;
3232

33+
/**
34+
* @var array
35+
*/
36+
private static $priorityMap = [
37+
MessagePriority::VERY_LOW => 0,
38+
MessagePriority::LOW => 1,
39+
MessagePriority::NORMAL => 2,
40+
MessagePriority::HIGH => 3,
41+
MessagePriority::VERY_HIGH => 4,
42+
];
43+
3344
/**
3445
* @param DbalContext $context
3546
* @param Config $config
@@ -63,6 +74,9 @@ public function createTransportMessage(Message $message)
6374
$transportMessage->setDelay($message->getDelay());
6475
$transportMessage->setReplyTo($message->getReplyTo());
6576
$transportMessage->setCorrelationId($message->getCorrelationId());
77+
if (array_key_exists($message->getPriority(), self::$priorityMap)) {
78+
$transportMessage->setPriority(self::$priorityMap[$message->getPriority()]);
79+
}
6680

6781
return $transportMessage;
6882
}
@@ -83,11 +97,17 @@ public function createClientMessage(PsrMessage $message)
8397
$clientMessage->setContentType($message->getHeader('content_type'));
8498
$clientMessage->setMessageId($message->getMessageId());
8599
$clientMessage->setTimestamp($message->getTimestamp());
86-
$clientMessage->setPriority(MessagePriority::NORMAL);
87100
$clientMessage->setDelay($message->getDelay());
88101
$clientMessage->setReplyTo($message->getReplyTo());
89102
$clientMessage->setCorrelationId($message->getCorrelationId());
90103

104+
$priorityMap = array_flip(self::$priorityMap);
105+
$priority = array_key_exists($message->getPriority(), $priorityMap) ?
106+
$priorityMap[$message->getPriority()] :
107+
MessagePriority::NORMAL;
108+
$clientMessage->setPriority($priority);
109+
110+
91111
return $clientMessage;
92112
}
93113

@@ -156,4 +176,12 @@ public function getConfig()
156176
{
157177
return $this->config;
158178
}
179+
180+
/**
181+
* @return array
182+
*/
183+
public static function getPriorityMap()
184+
{
185+
return self::$priorityMap;
186+
}
159187
}

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-
->orderBy('id', 'asc')
179+
->addOrderBy('id', 'asc')
180180
->setMaxResults(1)
181181
;
182182

pkg/dbal/Tests/DbalConsumerTest.php

+18-3
Original file line numberDiff line numberDiff line change
@@ -172,10 +172,15 @@ public function testShouldReceiveMessage()
172172
->will($this->returnSelf())
173173
;
174174
$queryBuilder
175-
->expects($this->exactly(2))
175+
->expects($this->exactly(1))
176176
->method('orderBy')
177177
->will($this->returnSelf())
178178
;
179+
$queryBuilder
180+
->expects($this->exactly(1))
181+
->method('addOrderBy')
182+
->will($this->returnSelf())
183+
;
179184

180185
$platform = $this->createPlatformMock();
181186

@@ -264,10 +269,15 @@ public function testShouldReturnNullIfThereIsNoNewMessage()
264269
->will($this->returnSelf())
265270
;
266271
$queryBuilder
267-
->expects($this->exactly(2))
272+
->expects($this->exactly(1))
268273
->method('orderBy')
269274
->will($this->returnSelf())
270275
;
276+
$queryBuilder
277+
->expects($this->exactly(1))
278+
->method('addOrderBy')
279+
->will($this->returnSelf())
280+
;
271281

272282
$platform = $this->createPlatformMock();
273283

@@ -352,10 +362,15 @@ public function testShouldThrowIfMessageWasNotRemoved()
352362
->will($this->returnSelf())
353363
;
354364
$queryBuilder
355-
->expects($this->exactly(2))
365+
->expects($this->exactly(1))
356366
->method('orderBy')
357367
->will($this->returnSelf())
358368
;
369+
$queryBuilder
370+
->expects($this->exactly(1))
371+
->method('addOrderBy')
372+
->will($this->returnSelf())
373+
;
359374

360375
$platform = $this->createPlatformMock();
361376

0 commit comments

Comments
 (0)