@@ -29,6 +29,18 @@ protected function fetchMessage(array $queues, int $redeliveryDelay): ?DbalMessa
2929
3030 $ endAt = microtime (true ) + 0.2 ; // add 200ms
3131
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+
3244 $ update = $ this ->getConnection ()->createQueryBuilder ()
3345 ->update ($ this ->getContext ()->getTableName ())
3446 ->set ('delivery_id ' , ':deliveryId ' )
@@ -41,7 +53,7 @@ protected function fetchMessage(array $queues, int $redeliveryDelay): ?DbalMessa
4153
4254 while (microtime (true ) < $ endAt ) {
4355 try {
44- $ result = $ this -> getResultByQueueList ( $ queues , $ now );
56+ $ result = $ select -> execute ()-> fetch ( );
4557 if (empty ($ result )) {
4658 return null ;
4759 }
@@ -143,30 +155,4 @@ private function deleteMessage(string $deliveryId): void
143155 ['delivery_id ' => DbalType::GUID ]
144156 );
145157 }
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- }
172158}
0 commit comments