@@ -427,15 +427,49 @@ protected function createQueuedHandlerCallable($class, $method)
427427 */
428428 protected function queueHandler ($ class , $ method , $ arguments )
429429 {
430- $ listener = ( new ReflectionClass ( $ class ))-> newInstanceWithoutConstructor ( );
430+ list ( $ listener, $ job ) = $ this -> createListenerAndJob ( $ class , $ method , $ arguments );
431431
432- $ connection = isset ($ listener ->connection ) ? $ listener ->connection : null ;
432+ $ connection = $ this ->resolveQueue ()->connection (
433+ isset ($ listener ->connection ) ? $ listener ->connection : null
434+ );
433435
434436 $ queue = isset ($ listener ->queue ) ? $ listener ->queue : null ;
435437
436- $ this ->resolveQueue ()
437- ->connection ($ connection )
438- ->pushOn ($ queue , new CallQueuedListener ($ class , $ method , $ arguments ));
438+ isset ($ listener ->delay )
439+ ? $ connection ->laterOn ($ queue , $ listener ->delay , $ job )
440+ : $ connection ->pushOn ($ queue , $ job );
441+ }
442+
443+ /**
444+ * Create the listener and job for a queued listener.
445+ *
446+ * @param string $class
447+ * @param string $method
448+ * @param array $arguments
449+ * @return array
450+ */
451+ protected function createListenerAndJob ($ class , $ method , $ arguments )
452+ {
453+ $ listener = (new ReflectionClass ($ class ))->newInstanceWithoutConstructor ();
454+
455+ return [$ listener , $ this ->propogateListenerOptions (
456+ $ listener , new CallQueuedListener ($ class , $ method , $ arguments )
457+ )];
458+ }
459+
460+ /**
461+ * Propogate listener options to the job.
462+ *
463+ * @param mixed $listener
464+ * @param mixed $job
465+ * @return mixed
466+ */
467+ protected function propogateListenerOptions ($ listener , $ job )
468+ {
469+ return tap ($ job , function ($ job ) use ($ listener ) {
470+ $ job ->tries = isset ($ listener ->tries ) ? $ listener ->tries : null ;
471+ $ job ->timeout = isset ($ listener ->timeout ) ? $ listener ->timeout : null ;
472+ });
439473 }
440474
441475 /**
0 commit comments