@@ -22,16 +22,16 @@ abstract protected function getConnection(): Connection;
2222 protected function fetchMessage (array $ queues , int $ redeliveryDelay ): ?array
2323 {
2424 $ now = time ();
25- $ deliveryId = ( string ) Uuid ::uuid1 ();
25+ $ deliveryId = Uuid ::uuid1 ();
2626
2727 $ endAt = microtime (true ) + 0.2 ; // add 200ms
2828
2929 $ select = $ this ->getConnection ()->createQueryBuilder ()
3030 ->select ('id ' )
3131 ->from ($ this ->getContext ()->getTableName ())
32- ->andWhere ('delivery_id IS NULL ' )
33- ->andWhere ('delayed_until IS NULL OR delayed_until <= :delayedUntil ' )
3432 ->andWhere ('queue IN (:queues) ' )
33+ ->andWhere ('delayed_until IS NULL OR delayed_until <= :delayedUntil ' )
34+ ->andWhere ('delivery_id IS NULL ' )
3535 ->addOrderBy ('priority ' , 'asc ' )
3636 ->addOrderBy ('published_at ' , 'asc ' )
3737 ->setParameter ('delayedUntil ' , $ now , ParameterType::INTEGER )
@@ -44,11 +44,11 @@ protected function fetchMessage(array $queues, int $redeliveryDelay): ?array
4444 ->set ('redeliver_after ' , ':redeliverAfter ' )
4545 ->andWhere ('id = :messageId ' )
4646 ->andWhere ('delivery_id IS NULL ' )
47- ->setParameter ('deliveryId ' , $ deliveryId , Type::STRING )
47+ ->setParameter ('deliveryId ' , $ deliveryId-> getBytes () , Type::BINARY )
4848 ->setParameter ('redeliverAfter ' , $ now + $ redeliveryDelay , Type::BIGINT )
4949 ;
5050
51- while (microtime (true ) < $ endAt ) {
51+ while (microtime (true ) >= $ endAt ) {
5252 $ result = $ select ->execute ()->fetch ();
5353 if (empty ($ result )) {
5454 return null ;
@@ -63,7 +63,7 @@ protected function fetchMessage(array $queues, int $redeliveryDelay): ?array
6363 ->select ('* ' )
6464 ->from ($ this ->getContext ()->getTableName ())
6565 ->andWhere ('delivery_id = :deliveryId ' )
66- ->setParameter ('deliveryId ' , $ deliveryId , Type::STRING )
66+ ->setParameter ('deliveryId ' , $ deliveryId-> getBytes () , Type::BINARY )
6767 ->setMaxResults (1 )
6868 ->execute ()
6969 ->fetch ()
@@ -88,18 +88,19 @@ protected function redeliverMessages(): void
8888 return ;
8989 }
9090
91- $ this ->getConnection ()->createQueryBuilder ()
91+ $ update = $ this ->getConnection ()->createQueryBuilder ()
9292 ->update ($ this ->getContext ()->getTableName ())
9393 ->set ('delivery_id ' , ':deliveryId ' )
9494 ->set ('redelivered ' , ':redelivered ' )
95- ->andWhere ('delivery_id IS NOT NULL ' )
9695 ->andWhere ('redeliver_after < :now ' )
97- ->setParameter (':now ' , (int ) time (), Type::BIGINT )
98- ->setParameter ('deliveryId ' , null , Type::STRING )
96+ ->andWhere ('delivery_id IS NOT NULL ' )
97+ ->setParameter (':now ' , time (), Type::BIGINT )
98+ ->setParameter ('deliveryId ' , null , Type::BINARY )
9999 ->setParameter ('redelivered ' , true , Type::BOOLEAN )
100- ->execute ()
101100 ;
102101
102+ $ update ->execute ();
103+
103104 $ this ->redeliverMessagesLastExecutedAt = microtime (true );
104105 }
105106
@@ -111,14 +112,17 @@ protected function removeExpiredMessages(): void
111112 return ;
112113 }
113114
114- $ this ->getConnection ()->createQueryBuilder ()
115+ $ update = $ this ->getConnection ()->createQueryBuilder ()
115116 ->delete ($ this ->getContext ()->getTableName ())
116117 ->andWhere ('(time_to_live IS NOT NULL) AND (time_to_live < :now) ' )
117- ->andWhere ('(redelivered = false OR delivery_id IS NULL) ' )
118+ ->andWhere ('delivery_id IS NULL ' )
119+ ->andWhere ('redelivered = false ' )
120+
118121 ->setParameter (':now ' , (int ) time (), Type::BIGINT )
119- ->execute ()
120122 ;
121123
124+ $ update ->execute ();
125+
122126 $ this ->removeExpiredMessagesLastExecutedAt = microtime (true );
123127 }
124128}
0 commit comments