@@ -42,6 +42,21 @@ class QueueWorker
4242 */
4343 protected $ maxMemory = 128 ;
4444
45+ /**
46+ * Callback to be executed **before** a job is processed.
47+ *
48+ * @var callable|null
49+ */
50+ protected $ onJobProcessing ;
51+
52+ /**
53+ * Callback to be executed **after** a job has been successfully processed.
54+ *
55+ *
56+ * @var callable|null
57+ */
58+ protected $ onJobProcessed ;
59+
4560 /**
4661 * Create a new queue worker.
4762 *
@@ -52,6 +67,28 @@ public function __construct(QueueManager $manager)
5267 $ this ->manager = $ manager ;
5368 }
5469
70+ /**
71+ * Set the callback to be executed **before** a job is processed.
72+ *
73+ * @param callable $callback
74+ * @return void
75+ */
76+ public function setOnJobProcessing (callable $ callback ): void
77+ {
78+ $ this ->onJobProcessing = $ callback ;
79+ }
80+
81+ /**
82+ * Set the callback to be executed **after** a job has been processed.
83+ *
84+ * @param callable $callback
85+ * @return void
86+ */
87+ public function setOnJobProcessed (callable $ callback ): void
88+ {
89+ $ this ->onJobProcessed = $ callback ;
90+ }
91+
5592 /**
5693 * Run the worker daemon.
5794 *
@@ -125,13 +162,20 @@ protected function processJob(QueueJob $queueJob): void
125162 $ job = $ this ->manager ->unserializeJob ($ queueJob ->payload );
126163 $ job ->attempts = $ queueJob ->attempts ;
127164
165+ if (is_callable ($ this ->onJobProcessing )) {
166+ ($ this ->onJobProcessing )($ job );
167+ }
168+
128169 // Execute the job
129170 $ this ->executeJob ($ job );
130171
131172 // Delete the job from queue if successful
132173 $ this ->manager ->delete ($ queueJob );
133174
134- $ this ->logInfo ("Job {$ job ->getJobId ()} processed successfully " );
175+ // Trigger onJobProcessed callback
176+ if (is_callable ($ this ->onJobProcessed )) {
177+ ($ this ->onJobProcessed )($ job );
178+ }
135179 } catch (\Throwable $ e ) {
136180 $ this ->handleJobException ($ queueJob , $ job ?? null , $ e );
137181 }
0 commit comments