diff --git a/src/Illuminate/Events/Dispatcher.php b/src/Illuminate/Events/Dispatcher.php index 9c12d741e7eb..e1b98c41437d 100755 --- a/src/Illuminate/Events/Dispatcher.php +++ b/src/Illuminate/Events/Dispatcher.php @@ -705,7 +705,7 @@ protected function propagateListenerOptions($listener, $job) $job->shouldBeEncrypted = $listener instanceof ShouldBeEncrypted; $job->timeout = $listener->timeout ?? null; $job->failOnTimeout = $listener->failOnTimeout ?? false; - $job->tries = $listener->tries ?? null; + $job->tries = method_exists($listener, 'tries') ? $listener->tries(...$data) : ($listener->tries ?? null); $job->through(array_merge( method_exists($listener, 'middleware') ? $listener->middleware(...$data) : [], diff --git a/tests/Events/QueuedEventsTest.php b/tests/Events/QueuedEventsTest.php index 4f9ec170ba1f..9a5c7f814553 100644 --- a/tests/Events/QueuedEventsTest.php +++ b/tests/Events/QueuedEventsTest.php @@ -179,6 +179,24 @@ public function testQueuePropagateRetryUntilAndMaxExceptions() }); } + public function testQueuePropagateTries() + { + $d = new Dispatcher; + + $fakeQueue = new QueueFake(new Container); + + $d->setQueueResolver(function () use ($fakeQueue) { + return $fakeQueue; + }); + + $d->listen('some.event', TestDispatcherOptions::class.'@handle'); + $d->dispatch('some.event', ['foo', 'bar']); + + $fakeQueue->assertPushed(CallQueuedListener::class, function ($job) { + return $job->tries === 5; + }); + } + public function testQueuePropagateMiddleware() { $d = new Dispatcher; @@ -294,6 +312,11 @@ public function retryUntil() return now()->addHour(1); } + public function tries() + { + return 5; + } + public function handle() { //