How to use Laravel queue? Below, the Laravel tutorial column will introduce to you how to use Laravel queues, as well as scenarios for using queues. I hope it will be helpful to you!
First of all, we need to know why we need to use queues, and what will happen if we don’t use queues! What are the advantages and disadvantages
We can give some examples of simple scenarios.
Sending emails
What are the common problems faced when sending emails ??
What are the benefits of using a queue?
Improve client response
When sending, we do not process it immediately, but throw it to the server, and the queue is managed and scheduled. You can customize the option to send immediately or delay sending according to the configuration
Improve fault tolerance
During the sending process, we may encounter that the target is rejected. For example, most people will encounter the scenario of sending error 502 to admin@qq.comn
.
In this scenario, we can understand this scenario as an event. During the process of email sending, we can trigger and construct the following events
Sending through this email may Leading to the generation of multiple time-consuming tasks, we can actually build multiple queue services. Each queue manages its own affairs, very gooddecoupling They
can be set very well through the Laravel queueimmediate sending,delayed sending, Retry sending
Sending frequency is controllable
Developers who have used emails sent in batches will inevitably encounter a problem. That is, if we directly send in batches, that is, send a large number of emails at the same time. Then the email service provider is likely to reject our email or the email will be put into the trash and be identified as advertisementSo, delayed sending is used here , we can configure the frequency reasonably according to the known mails waiting for delivery in the current queue service, or switch the mail configuration to achieve controllable frequency.
Such as setting a configuration to be sent 10 times a minute, etc. Similarly, we can achieve configuration, frequency control, and transmission control decoupling here
##Others
Of course we still have many situations where we will use itHow to use Laravel queue
Here is just a list of general usage directions and how to use it better . The code may not run well, the main thing is to understand the logic We are using Redis as the driver here
The driver is set to Redis
> .env QUEUE_CONNECTION=redis > 在 config/queue.php 中可以找到
Quickly create queues and Delivery task
# 创建 任务 php artisan make:job ProcessPodcast
app/Jobs/EmailJob.php
class EmailJob implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; protected $data; /** * Create a new job instance. * * @return void */ public function __construct(array $data) { $this->data = $data; } /** * Execute the job. * * @return void */ public function handle() { $service = new EmailService(); // ... 检查当前可用 Mailer // 这里你自定义就好了,这个方法中你可以根据你自己的配置,获取到当前可用的配置 $mailer = $service->getMailer(); // ... 获取当前要发送的数据 $data = $this->data; $service->send($mailer, $data); } }
These operations can be found in the documentCall to send
# 延迟 2分钟 发送 # 这里使用的是 Crontab 包 (不过 Laravel 自带) EmailJob::dispatch()->delay(now()->addMinutes(2)); # 立即发送 (不会进入到队列中) EmailJob::dispatchNow();
public function __construct(array $data) { # 使用 emailQueue $this->onQueue('emailQueue'); $this->data = $data; }
# 重试 5 次 public $tries = 5;
/** * 确定任务应该超时的时间 * * @return \DateTime */ public function retryUntil() { return now()->addMinutes(10); }
If you do not configure onQueue, you can With ---queue parameter configurationphp artisan queue:work --queue=emailQueueCopy after login
Laravel Event is also implemented through queue# 创建 Event php artisan make:event FailEvent class FailEvent { use Dispatchable, InteractsWithSockets, SerializesModels; protected $data; protected $tag; /** * @param array $data 投递的数据 * @param string $tag 要操作的事情 */ public function __construct(array $data, string $tag = 'system') { $this->data = $data; $this->tag = $tag; } } # 创建 listener php artisan make:listener FailListener class FailListener { /** * Handle the event. * * @param object $event * @return void */ public function handle(FailEvent $event) { $this->{$event->tag}($event->data); } /** * 处理系统异常 * DateTime: 2021/12/3 11:02 上午 * @param array $data */ public function system(array $data) { } /** * 处理邮件异常 * DateTime: 2021/12/3 11:02 上午 */ public function email() { } } # app/Providers/EventServiceProvider.php protected $listen = [ FailEvent::class => [ FailListener::class, ], ] # 投递 event(new FailEvent(['error' = '异常信息'], 'email'));Copy after loginOthers
In fact, Laravel mostly helped me implement the entire process. You can try to use redis to implement a controllable queue yourself. Proficiency is all you need to master Redis related data types. Here is a brief list of the data types used in Redis in the above modesOf course, there are many other uses of Redis to meet your own needs. Can.
- ListUse it to complete the queue function of popping and pushing into the stack
- Hash Use it to store the serialized
Event or Job __construct passed For the incoming data, try not to serialize the entire class
You can also implement storage. Mailer data- Sorted SetYou can set the time to
Sorted Set Sort by the score to find the queue task we want to execute recently
There is no perfect solution in the world, only the most suitable solution for you. When you encounter problems at work, try to learn to draw inferences from one example, use various tools reasonably, and design solutions to implement them. The code is just the final microcosm. The final thing is to learn to understand. Each language and each framework is just the implementation of a solution. Only by mastering it can you be invincible...
For more programming-related knowledge, please Visit: Introduction to Programming! !
The above is the detailed content of Let's talk about Laravel's queue mechanism and understand the usage scenarios of queues.. For more information, please follow other related articles on the PHP Chinese website!