search
HomePHP FrameworkLaravelIntroduction to the usage of queues in laravel framework (with code)

This article brings you an introduction to the usage of queues in the laravel framework (with code). It has certain reference value. Friends in need can refer to it. I hope it will be helpful to you.

In actual project development, we often encounter situations that require lightweight queues, such as sending text messages, sending emails, etc. These tasks are not enough to use heavyweight message queues such as kafka and RabbitMQ, but And it does require functions such as asynchronous, retry, and concurrency control. Generally speaking, we often use Redis, Beanstalk, and Amazon SQS to implement related functions. Laravel provides a unified API for different background queue services. This article will introduce the most widely used redis queue.

Before explaining laravel’s queue service, we must first talk about the queue service based on redis. First of all, redis is designed for caching, but due to some of its own characteristics, it can be used for message queues

redis queue data structure

List linked list

redis It is easy to implement message queue features such as FIFO (first in, first out). You only need a list object to fetch data from the beginning and stuff data from the tail.

Related commands: (1) Left-side input and right-side output: lpush/rpop; (2) Right-side input and left-side output: rpush/lpop.

This simple message queue is easy to implement.

Zset ordered set

Some task scenarios do not require the task to be executed immediately, but need to be delayed; some tasks are very important and need to be retried when the task fails. These functions cannot be accomplished solely by relying on lists. At this time, an ordered collection of redis is needed.

Redis ordered set is similar to Redis set, which is a collection that does not contain the same string. The difference between them is that each member of the ordered set is associated with a score, which is used to rank the members of the ordered set from the lowest score to the highest score.

There is no relationship between the ordered set and the delayed task. However, you can set the score of the ordered set to the time when the delayed task is started, and then poll the ordered set to retrieve the expired tasks. Come out for processing, thus realizing the function of delaying tasks.

For important tasks that need to be retried, before the task is executed, the task will be put into an ordered collection and the longest execution time of the task will be set. If the task is successfully executed, the task will be deleted from the ordered collection. If the task is not completed within the specified time, the tasks in the ordered set will be put back into the queue.

Related commands:

(1) ZADD Adds one or more members to an ordered set, or updates its score if it already exists.

(2) ZRANGEBYSCORE Returns an ordered set of member ranges by score.

(3) ZREMRANGEBYRANK Removes all members from an ordered set within the given index.

Laravel Queue Service Task Scheduling

The queue service task scheduling process is as follows:

Introduction to the usage of queues in laravel framework (with code)

Laravel’s queue service consists of two There are two process controls, one is the producer and the other is the consumer. These two processes manipulate three redis queues, one of which is List, responsible for immediate tasks, and two Zsets, responsible for delayed tasks and pending tasks.

The producer is responsible for pushing tasks to redis. If it is an immediate task, it will be pushed to queue:default by default; if it is a delayed task, it will be pushed to queue:default:delayed.

The consumer polls two queues, continuously takes out tasks from the queue, first puts the tasks into queue:default:reserved, and then executes related tasks. If the task is executed successfully, the task in queue:default:reserved will be deleted, otherwise it will be put back into the queue:default:delayed queue.

The overall process of laravel queue service

Task distribution process:

Introduction to the usage of queues in laravel framework (with code)

Task processor operation:

Introduction to the usage of queues in laravel framework (with code)

Create task

queue settings

'redis' => [
        'driver' => 'redis',
        'connection' => 'default',
        'queue' => 'default',
        'retry_after' => 90,
    ],

Configure in config/queue.php
Generally speaking, the default redis configuration As above, connection is the connection name of redis in the database; queue is the queue name in redis. It is worth noting that if you are using a redis cluster, you need to use the key hash tag, which is {default}; when the task runs beyond retry_after After this time, the task will be put back into the queue.

Creation of task class

The structure of the task class is very simple. Generally speaking, it only contains a handle method that the queue uses to call this task.

If you want the task to be pushed to the queue rather than executed synchronously, you need to implement the IlluminateContractsQueueShouldQueue interface.

If you want to push tasks to a specific connection, such as redis or sqs, you need to set the conneciton variable.

If you want to push the task to a specific queue, you can set the queue variable.

如果想要让任务延迟推送,那么需要设置 delay 变量。

如果想要设置任务至多重试的次数,可以使用 tries 变量;

如果想要设置任务可以运行的最大秒数,那么可以使用 timeout 参数。

如果想要手动访问队列,可以使用 trait : IlluminateQueueInteractsWithQueue。

任务的分发
分发服务
写好任务类后,就能通过 dispatch 辅助函数来分发它了。唯一需要传递给 dispatch 的参数是这个任务类的实例:

class PodcastController extends Controller
{
    public function store(Request $request)
    {
        // 创建播客...

        ProcessPodcast::dispatch($podcast);
    }
}

如果想延迟执行一个队列中的任务,可以用任务实例的 delay 方法。

 ProcessPodcast::dispatch($podcast)
                ->delay(Carbon::now()->addMinutes(10));

通过推送任务到不同的队列,可以给队列任务分类,甚至可以控制给不同的队列分配多少任务。要指定队列的话,就调用任务实例的 onQueue 方法:

ProcessPodcast::dispatch($podcast)->onQueue('processing');

如果使用了多个队列连接,可以将任务推到指定连接。要指定连接的话,可以在分发任务的时候使用 onConnection 方法:

ProcessPodcast::dispatch($podcast)->onConnection('redis
');

The above is the detailed content of Introduction to the usage of queues in laravel framework (with code). For more information, please follow other related articles on the PHP Chinese website!

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Laravel's Primary Function: Backend DevelopmentLaravel's Primary Function: Backend DevelopmentApr 15, 2025 am 12:14 AM

Laravel's core functions in back-end development include routing system, EloquentORM, migration function, cache system and queue system. 1. The routing system simplifies URL mapping and improves code organization and maintenance. 2.EloquentORM provides object-oriented data operations to improve development efficiency. 3. The migration function manages the database structure through version control to ensure consistency. 4. The cache system reduces database queries and improves response speed. 5. The queue system effectively processes large-scale data, avoid blocking user requests, and improve overall performance.

Laravel's Backend Capabilities: Databases, Logic, and MoreLaravel's Backend Capabilities: Databases, Logic, and MoreApr 14, 2025 am 12:04 AM

Laravel performs strongly in back-end development, simplifying database operations through EloquentORM, controllers and service classes handle business logic, and providing queues, events and other functions. 1) EloquentORM maps database tables through the model to simplify query. 2) Business logic is processed in controllers and service classes to improve modularity and maintainability. 3) Other functions such as queue systems help to handle complex needs.

Laravel's Versatility: From Simple Sites to Complex SystemsLaravel's Versatility: From Simple Sites to Complex SystemsApr 13, 2025 am 12:13 AM

The Laravel development project was chosen because of its flexibility and power to suit the needs of different sizes and complexities. Laravel provides routing system, EloquentORM, Artisan command line and other functions, supporting the development of from simple blogs to complex enterprise-level systems.

Laravel (PHP) vs. Python: Development Environments and EcosystemsLaravel (PHP) vs. Python: Development Environments and EcosystemsApr 12, 2025 am 12:10 AM

The comparison between Laravel and Python in the development environment and ecosystem is as follows: 1. The development environment of Laravel is simple, only PHP and Composer are required. It provides a rich range of extension packages such as LaravelForge, but the extension package maintenance may not be timely. 2. The development environment of Python is also simple, only Python and pip are required. The ecosystem is huge and covers multiple fields, but version and dependency management may be complex.

Laravel and the Backend: Powering Web Application LogicLaravel and the Backend: Powering Web Application LogicApr 11, 2025 am 11:29 AM

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.

Why is Laravel so popular?Why is Laravel so popular?Apr 02, 2025 pm 02:16 PM

Laravel's popularity includes its simplified development process, providing a pleasant development environment, and rich features. 1) It absorbs the design philosophy of RubyonRails, combining the flexibility of PHP. 2) Provide tools such as EloquentORM, Blade template engine, etc. to improve development efficiency. 3) Its MVC architecture and dependency injection mechanism make the code more modular and testable. 4) Provides powerful debugging tools and performance optimization methods such as caching systems and best practices.

Which is better, Django or Laravel?Which is better, Django or Laravel?Mar 28, 2025 am 10:41 AM

Both Django and Laravel are full-stack frameworks. Django is suitable for Python developers and complex business logic, while Laravel is suitable for PHP developers and elegant syntax. 1.Django is based on Python and follows the "battery-complete" philosophy, suitable for rapid development and high concurrency. 2.Laravel is based on PHP, emphasizing the developer experience, and is suitable for small to medium-sized projects.

Which is better PHP or Laravel?Which is better PHP or Laravel?Mar 27, 2025 pm 05:31 PM

PHP and Laravel are not directly comparable, because Laravel is a PHP-based framework. 1.PHP is suitable for small projects or rapid prototyping because it is simple and direct. 2. Laravel is suitable for large projects or efficient development because it provides rich functions and tools, but has a steep learning curve and may not be as good as pure PHP.

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: How To Unlock Everything In MyRise
1 months agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

SecLists

SecLists

SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

Dreamweaver Mac version

Dreamweaver Mac version

Visual web development tools

PhpStorm Mac version

PhpStorm Mac version

The latest (2018.2.1) professional PHP integrated development tool