search
HomeBackend DevelopmentPHP TutorialTutorial on the most basic operation of using Queue in Laravel

Laravel queue service provides a unified API for various background queues. The following article mainly introduces you to the most basic operation tutorial on using Queue in Laravel. The article introduces it in detail through sample code. Friends who need it You can use it as a reference, let’s take a look below.

Preface

The queue service in laravel is no different from other queue services. They are the simplest and most common ones that are most in line with human thinking. The process: There is a place to store queue information, a PHP process writes tasks when running, and another PHP daemon process polls the queue information, executes and deletes tasks that meet the execution requirements. Since PHP is a URL-driven synchronous language and inherently blocking, it is not surprising that Laravel provides a daemon tool to query and execute queue information.

It was the first time I came into contact with Laravel’s queue in the past two days, and it took a long time. . . After all the hard work, I still feel that I don’t know how to use Laravel. The documentation is relatively simple and summarized, and it’s a bit difficult to read the source code (but reading the source code and slowly debugging and verifying it is still the most reliable).

The following is a simple demo of mine, which only uses the most basic operations of the queue. More advanced operations require more time:)

Like me, there are some queues for getting started with Laravel. Students who are in difficulty can communicate with each other.

Configuration

Add Redis package

In composer.json Add "predis/predis": "~1.0" to the require section, and then composer up to update it.

database.php

Configure the redis database part in the database.php configuration file. There is a default connection by default. Just use this: )

According to the configuration items required in this default connection, edit the .env configuration file and fill in the REDIS_HOST, REDIS_PASSWORD, and REDIS_PORT with the corresponding values ​​of Redis in your own server.

queue.php

First you need to configure QUEUE_DRIVER in .env. Because you plan to use Redis now, you configure it to redis.

Then configure the redis connection in the connections section of queue.php, where the value corresponding to connection is the default connection of redis in database.php.

Task class

The next step is to write the actual operation class. Laravel provides the artisan command to simplify the creation of task classes:

php artisan make:job Demo

The Jobs directory will be generated in the app directory, which already has the Demo.php task class.

Lumen does not have this artisan command, but it is very convenient. By default, there will be an ExampleJob.php already written, just copy it and change the name.
First write a simple log output test, in the handle method:

Log::info('Hello, queue');

Issuing tasks

Now write an entry function to push the task to the queue. Use the auxiliary function dispatch():

Use the following method in Laravel:

Demo::dispatch();

Use the following method in Lumen:

dispatch(new Demo);

Open the queue

If everything goes well, this is the last step. Execute in the command line:

php artisan queue:listen --queue=default

It will monitor the queue and output simple execution conditions, such as:

[2017-11-07 02:12:47] Processing: App\Jobs\Demo
[2017-11-07 02:12:47] Processed: App\Jobs\Demo

After there are no problems, you can let this queue script execute in the background:

php artisan queue:work --daemon --quiet --queue=default 1>> /dev/null 2>&1

Advanced:)

When pushing to the queue, there is usually a need to pass parameters, so how do you pass them here?

Parameter passing

Passing in

The method of passing parameters in the entry function is as follows:

The following method is used in Laravel:

$param = 'Stephen';
Demo::dispatch($param);

The following method is used in Lumen:

$param = 'Stephen';
dispatch(new Demo($param));

Receive

The method of receiving parameters in the task class is as follows:

protected $param;
/**
 * Create a new job instance.
 *
 * @return void
 */
public function __construct($param)
{
  $this->param = $param;
}
/**
 * Execute the job.
 *
 * @return void
 */
public function handle()
{
  Log::info('Hello, ' . $this->param);
}

This is the first attempt. There are many advanced usages, such as delayed distribution, error handling, priority, failure handling, etc. I will continue to write in the future:)

Multiple Queues

This is an issue that must be taken into consideration. It is impossible for me to put all tasks in a queue called default, which makes it difficult to manage the queue.

To specify different queues, it is very simple. Just follow the onQueue() method immediately after dispatch():

Demo::dispatch()->onQueue('emails');

No, I don't seem to have defined this queue called emails. Well, naturally we need to make some changes. The redis configuration queue in the queue.php configuration file is changed from default to {default}. The effect of this is that the name of the queue can be obtained dynamically from runtime instead of being hard-coded. .

If you use the Lumen framework, you will get an error if you write directly like this: Call to a member function onQueue() on string.

原因在于 Lumen 的 Job 基类中并没有使用 Illuminate\Foundation\Bus\Dispatchable 这个 trait,而是直接使用 Illuminate\Bus\Queueable 中的 onQueue() 方法。

那么现在就很清楚了,我们的 Job 类使用了 Illuminate\Bus\Queueable 这个 trait,所以需要在 Job 类上调用这个 onQueue() 方法。

$job = new XXXJob();
dispatch($job->onQueue('queue-name'));

当我们在开启队列的时候:

php artisan queue:work --queue=emails

这里指定的队列名 emails 和 dispatch 时指定的队列名保持一致即可。

总结

您可能感兴趣的文章:

详解Yaf框架PHPUnit集成测试方法讲解

快速解决PHP调用Word组件DCOM权限的问题讲解

PHP获取数组中指定的一列实例讲解

The above is the detailed content of Tutorial on the most basic operation of using Queue in Laravel. 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
What are some common problems that can cause PHP sessions to fail?What are some common problems that can cause PHP sessions to fail?Apr 25, 2025 am 12:16 AM

Reasons for PHPSession failure include configuration errors, cookie issues, and session expiration. 1. Configuration error: Check and set the correct session.save_path. 2.Cookie problem: Make sure the cookie is set correctly. 3.Session expires: Adjust session.gc_maxlifetime value to extend session time.

How do you debug session-related issues in PHP?How do you debug session-related issues in PHP?Apr 25, 2025 am 12:12 AM

Methods to debug session problems in PHP include: 1. Check whether the session is started correctly; 2. Verify the delivery of the session ID; 3. Check the storage and reading of session data; 4. Check the server configuration. By outputting session ID and data, viewing session file content, etc., you can effectively diagnose and solve session-related problems.

What happens if session_start() is called multiple times?What happens if session_start() is called multiple times?Apr 25, 2025 am 12:06 AM

Multiple calls to session_start() will result in warning messages and possible data overwrites. 1) PHP will issue a warning, prompting that the session has been started. 2) It may cause unexpected overwriting of session data. 3) Use session_status() to check the session status to avoid repeated calls.

How do you configure the session lifetime in PHP?How do you configure the session lifetime in PHP?Apr 25, 2025 am 12:05 AM

Configuring the session lifecycle in PHP can be achieved by setting session.gc_maxlifetime and session.cookie_lifetime. 1) session.gc_maxlifetime controls the survival time of server-side session data, 2) session.cookie_lifetime controls the life cycle of client cookies. When set to 0, the cookie expires when the browser is closed.

What are the advantages of using a database to store sessions?What are the advantages of using a database to store sessions?Apr 24, 2025 am 12:16 AM

The main advantages of using database storage sessions include persistence, scalability, and security. 1. Persistence: Even if the server restarts, the session data can remain unchanged. 2. Scalability: Applicable to distributed systems, ensuring that session data is synchronized between multiple servers. 3. Security: The database provides encrypted storage to protect sensitive information.

How do you implement custom session handling in PHP?How do you implement custom session handling in PHP?Apr 24, 2025 am 12:16 AM

Implementing custom session processing in PHP can be done by implementing the SessionHandlerInterface interface. The specific steps include: 1) Creating a class that implements SessionHandlerInterface, such as CustomSessionHandler; 2) Rewriting methods in the interface (such as open, close, read, write, destroy, gc) to define the life cycle and storage method of session data; 3) Register a custom session processor in a PHP script and start the session. This allows data to be stored in media such as MySQL and Redis to improve performance, security and scalability.

What is a session ID?What is a session ID?Apr 24, 2025 am 12:13 AM

SessionID is a mechanism used in web applications to track user session status. 1. It is a randomly generated string used to maintain user's identity information during multiple interactions between the user and the server. 2. The server generates and sends it to the client through cookies or URL parameters to help identify and associate these requests in multiple requests of the user. 3. Generation usually uses random algorithms to ensure uniqueness and unpredictability. 4. In actual development, in-memory databases such as Redis can be used to store session data to improve performance and security.

How do you handle sessions in a stateless environment (e.g., API)?How do you handle sessions in a stateless environment (e.g., API)?Apr 24, 2025 am 12:12 AM

Managing sessions in stateless environments such as APIs can be achieved by using JWT or cookies. 1. JWT is suitable for statelessness and scalability, but it is large in size when it comes to big data. 2.Cookies are more traditional and easy to implement, but they need to be configured with caution to ensure security.

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

Video Face Swap

Video Face Swap

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

Hot Tools

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.

mPDF

mPDF

mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

SublimeText3 Linux new version

SublimeText3 Linux new version

SublimeText3 Linux latest version

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

DVWA

DVWA

Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software