@@ -19,6 +19,10 @@ class Redis implements Publisher, Consumer
1919 * @var (callable(Queue, \Throwable, int, int): void)|null
2020 */
2121 private $ reconnectCallback = null ;
22+ /**
23+ * @var (callable(Queue, int): void)|null
24+ */
25+ private $ reconnectSuccessCallback = null ;
2226
2327 public function __construct (private readonly Connection $ connection )
2428 {
@@ -31,6 +35,13 @@ public function setReconnectCallback(?callable $callback): self
3135 return $ this ;
3236 }
3337
38+ public function setReconnectSuccessCallback (?callable $ callback ): self
39+ {
40+ $ this ->reconnectSuccessCallback = $ callback ;
41+
42+ return $ this ;
43+ }
44+
3445 public function consume (Queue $ queue , callable $ messageCallback , callable $ successCallback , callable $ errorCallback ): void
3546 {
3647 $ reconnectBackoffMs = self ::RECONNECT_BACKOFF_MS ;
@@ -42,6 +53,10 @@ public function consume(Queue $queue, callable $messageCallback, callable $succe
4253 */
4354 try {
4455 $ nextMessage = $ this ->connection ->rightPopArray ("{$ queue ->namespace }.queue. {$ queue ->name }" , self ::POP_TIMEOUT );
56+ if ($ reconnectAttempt > 0 ) {
57+ $ this ->triggerReconnectSuccessCallback ($ queue , $ reconnectAttempt );
58+ }
59+
4560 $ reconnectBackoffMs = self ::RECONNECT_BACKOFF_MS ;
4661 $ reconnectAttempt = 0 ;
4762 } catch (\RedisException |\RedisClusterException $ e ) {
@@ -147,6 +162,18 @@ private function triggerReconnectCallback(Queue $queue, \Throwable $error, int $
147162 }
148163 }
149164
165+ private function triggerReconnectSuccessCallback (Queue $ queue , int $ attempts ): void
166+ {
167+ if (!\is_callable ($ this ->reconnectSuccessCallback )) {
168+ return ;
169+ }
170+
171+ try {
172+ ($ this ->reconnectSuccessCallback )($ queue , $ attempts );
173+ } catch (\Throwable ) {
174+ }
175+ }
176+
150177 public function enqueue (Queue $ queue , array $ payload , bool $ priority = false ): bool
151178 {
152179 $ payload = [
0 commit comments