@@ -29,6 +29,18 @@ protected function fetchMessage(array $queues, int $redeliveryDelay): ?DbalMessa
29
29
30
30
$ endAt = microtime (true ) + 0.2 ; // add 200ms
31
31
32
+ $ select = $ this ->getConnection ()->createQueryBuilder ()
33
+ ->select ('id ' )
34
+ ->from ($ this ->getContext ()->getTableName ())
35
+ ->andWhere ('queue IN (:queues) ' )
36
+ ->andWhere ('delayed_until IS NULL OR delayed_until <= :delayedUntil ' )
37
+ ->andWhere ('delivery_id IS NULL ' )
38
+ ->addOrderBy ('priority ' , 'asc ' )
39
+ ->addOrderBy ('published_at ' , 'asc ' )
40
+ ->setParameter ('queues ' , $ queues , Connection::PARAM_STR_ARRAY )
41
+ ->setParameter ('delayedUntil ' , $ now , DbalType::INTEGER )
42
+ ->setMaxResults (1 );
43
+
32
44
$ update = $ this ->getConnection ()->createQueryBuilder ()
33
45
->update ($ this ->getContext ()->getTableName ())
34
46
->set ('delivery_id ' , ':deliveryId ' )
@@ -41,7 +53,7 @@ protected function fetchMessage(array $queues, int $redeliveryDelay): ?DbalMessa
41
53
42
54
while (microtime (true ) < $ endAt ) {
43
55
try {
44
- $ result = $ this -> getResultByQueueList ( $ queues , $ now );
56
+ $ result = $ select -> execute ()-> fetch ( );
45
57
if (empty ($ result )) {
46
58
return null ;
47
59
}
@@ -143,30 +155,4 @@ private function deleteMessage(string $deliveryId): void
143
155
['delivery_id ' => DbalType::GUID ]
144
156
);
145
157
}
146
-
147
- private function getResultByQueueList (array $ queues , int $ now ): ?array
148
- {
149
- $ select = $ this ->getConnection ()->createQueryBuilder ()
150
- ->select ('id ' )
151
- ->from ($ this ->getContext ()->getTableName ())
152
- ->andWhere ('queue = :queue ' )
153
- ->andWhere ('delayed_until IS NULL OR delayed_until <= :delayedUntil ' )
154
- ->andWhere ('delivery_id IS NULL ' )
155
- ->addOrderBy ('priority ' , 'asc ' )
156
- ->addOrderBy ('published_at ' , 'asc ' )
157
- ->setParameter ('delayedUntil ' , $ now , DbalType::INTEGER )
158
- ->setMaxResults (1 );
159
-
160
- foreach ($ queues as $ queue ) {
161
- $ select ->setParameter ('queue ' , $ queue , DbalType::STRING );
162
-
163
- $ result = $ select ->execute ()->fetch ();
164
-
165
- if (!empty ($ result )) {
166
- return $ result ;
167
- }
168
- }
169
-
170
- return null ;
171
- }
172
158
}
0 commit comments