New features and changes in Laravel 8 queue system
The following is the tutorial column of Laravel to introduce you to the new features and changes of the Laravel 8 queue system. I hope it will be helpful to friends in need!
Laravel 8 comes with cool new features and some changes to the queue system. In this article, we'll look at these features and changes.
Change
Backoff
has beenretryAfter()
Methods and properties of retryAfter
queued jobs, emails, notifications and listeners were renamed to backoff
. The
php artisan queue:work
command's --delay
option has also been renamed to --backoff
.
You should also know that you can now pass an array to the backoff
property to instruct the worker to implement exponential backoff:
public $backoff = [30, 60];
or from The backoff()
method returns an array:
public function backoff() { return [30, 60]; }
Using exponential backoff here, we instruct the worker to delay 30 seconds after the first failure to retry the job, and then delay 60 seconds after each failure .
You can also use exponential backoff on the queue:work
command:
php artisan queue:Work --backoff=30,60
Job Expiration
Queue the job, The timeoutAt
property for notifications and listeners has been renamed to retryUntil
.
Use $retryUntil
to instruct the worker to continue retrying the job until some time in the future.
You can add retryUntil
as a public property of the job class or as a retryUntil
method:
public function retryUntil() { return now()->addDay(); }
New Features
Queue Closure
You can now chain calls to the catch()
method when dispatching a queue closure:
dispatch(function () { // Job logic... })->catch(function (Throwable $e) { // Handle Failure... });
if If the job fails, the closure provided to the catch()
method will be called.
Database Driver Reliability
Laravel will now perform operations within a transaction when a job is released back to the queue using the database queue driver. This means that jobs will not be removed from the queue unless a new published instance is added. This greatly reduces the chance of job failure.
Redis Driver Efficiency
When using the Redis queue driver to batch distribute a set of jobs, Laravel will perform the operation by sending a single command to Redis. Previously, Laravel used to send multiple rpush
commands to Redis, one for each job.
Worker Graceful Termination
Starting with Laravel 8, Workers will exit gracefully and call any termination registered by App::Terminating()
callback.
Worker self-terminating
To avoid memory leaks, it is common practice to kill your workers from time to time and then let your process monitoring tool start a new worker. This is usually done by adding a CRON job that runs the queue:restart
command.
In Laravel 8, you can instruct Workers to exit after processing a certain number of jobs or running for a specific number of seconds:
php artisan queue:work --max-jobs=1000 --max-time=3600
Named Workers
You now add the --name
option to the queue:work
command:
php artisan queue:work --name=notifications
The main purpose of adding this functionality is to allow people to customize Workers at runtime How to choose which queue to process a task:
Worker::popUsing('notifications', function ($pop) { $queues = time()->atNight() ? ['mail', 'webhooks'] : ['push-notifications', 'sms', 'mail', 'webhooks']; foreach ($queues as $queue) { if (! is_null($job = $pop($queue))) { return $job; } } });
Task Batching
Laravel's task batching allows you to dispatch many tasks for parallel processing by your Workers. You can perform actions after all tasks in the batch have been processed or any batch task has failed:
Bus::batch([ new ProcessFile(1), new ProcessFile(2), new ProcessFile(3), ])->dispatch();
You can find more information about "Job Batching" in Official Documentation More information.
Job Chain
You can now schedule a series of jobs directly using Bus
:
Bus::chain([ new ExtractReports, new GenerateReport, new SendResults, ])->dispatch();
You can also add a catch()
Callback that will be called if any job in the chain fails:
Bus::chain([ new ExtractReports, new GenerateReport, new SendResults, ])->catch(function(){ // Handle the chain failure. }) ->dispatch();
Horizon Balance Rate
Two new ones have been added to Horizon Configuration options: balanceMaxShift
and balanceCooldown
.
'environments' => [ 'environment' => [ 'supervisor-1' => [ 'balanceMaxShift' => 5, ], ], ],
balanceMaxShift
Sets the maximum number of worker processes to add or remove each time Horizon expands the worker pool. In previous versions of Horizon, only one worker process was added or removed, now you can control that number.
As for balanceCooldown
, it sets the number of seconds to wait between each scaling operation. In earlier versions of Horizon, this was hardcoded to 3 seconds.
'environments' => [ 'environment' => [ 'supervisor-1' => [ 'balanceCooldown' => 1, ], ], ],
原文地址:https://dev.to/themsaid/features-and-changes-coming-to-laravel-8-s-queue-system-5amg
译文地址:https://learnku.com/laravel/t/50086
The above is the detailed content of New features and changes in Laravel 8 queue system. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics











Laravel is a PHP framework for easy building of web applications. It provides a range of powerful features including: Installation: Install the Laravel CLI globally with Composer and create applications in the project directory. Routing: Define the relationship between the URL and the handler in routes/web.php. View: Create a view in resources/views to render the application's interface. Database Integration: Provides out-of-the-box integration with databases such as MySQL and uses migration to create and modify tables. Model and Controller: The model represents the database entity and the controller processes HTTP requests.

When developing websites using CraftCMS, you often encounter resource file caching problems, especially when you frequently update CSS and JavaScript files, old versions of files may still be cached by the browser, causing users to not see the latest changes in time. This problem not only affects the user experience, but also increases the difficulty of development and debugging. Recently, I encountered similar troubles in my project, and after some exploration, I found the plugin wiejeben/craft-laravel-mix, which perfectly solved my caching problem.

Laravel provides a comprehensive Auth framework for implementing user login functions, including: Defining user models (Eloquent model), creating login forms (Blade template engine), writing login controllers (inheriting Auth\LoginController), verifying login requests (Auth::attempt) Redirecting after login is successful (redirect) considering security factors: hash passwords, anti-CSRF protection, rate limiting and security headers. In addition, the Auth framework also provides functions such as resetting passwords, registering and verifying emails. For details, please refer to the Laravel documentation: https://laravel.com/doc

How does Laravel play a role in backend logic? It simplifies and enhances backend development through routing systems, EloquentORM, authentication and authorization, event and listeners, and performance optimization. 1. The routing system allows the definition of URL structure and request processing logic. 2.EloquentORM simplifies database interaction. 3. The authentication and authorization system is convenient for user management. 4. The event and listener implement loosely coupled code structure. 5. Performance optimization improves application efficiency through caching and queueing.

Article summary: This article provides detailed step-by-step instructions to guide readers on how to easily install the Laravel framework. Laravel is a powerful PHP framework that speeds up the development process of web applications. This tutorial covers the installation process from system requirements to configuring databases and setting up routing. By following these steps, readers can quickly and efficiently lay a solid foundation for their Laravel project.

Want to learn the Laravel framework, but suffer from no resources or economic pressure? This article provides you with free learning of Laravel, teaching you how to use resources such as online platforms, documents and community forums to lay a solid foundation for your PHP development journey from getting started to master.

The Laravel framework has built-in methods to easily view its version number to meet the different needs of developers. This article will explore these methods, including using the Composer command line tool, accessing .env files, or obtaining version information through PHP code. These methods are essential for maintaining and managing versioning of Laravel applications.

In the Laravel framework version selection guide for beginners, this article dives into the version differences of Laravel, designed to assist beginners in making informed choices among many versions. We will focus on the key features of each release, compare their pros and cons, and provide useful advice to help beginners choose the most suitable version of Laravel based on their skill level and project requirements. For beginners, choosing a suitable version of Laravel is crucial because it can significantly impact their learning curve and overall development experience.
