认识 Laravel Queue Jobs

什麽是 Queue Jobs?

学过资料结构的朋友一定不陌生,queue 是一种先进先出的资料结构。

而 Laravel 的 queue job 是一个类似待办清单的功能,以 queue 的方式储存待办的任务 (job),然後会有小精灵依序帮你执行 X)

queue job 可以分成两块工作来看,一是把任务排进队伍里、二是执行任务;算是一个生产者消费者的模型。

  • Push jobs to queue (queue 可以想像成一条队伍,可以不只一条)
  • Worker processes jobs (有小精灵会去消化工作)

Job

新增一个 job class,在 handle 方法里写这个 job 具体要做的事。详细请参阅官方文件

$ php artisan make:job JOB_NAME

新增一个 job 到队伍里:

// This job is sent to the default connection's default queue...
MyJobClass::dispatch();

// This job is sent to the default connection's "emails" queue...
MyJobClass::dispatch()->onQueue('emails');

Push

dispatch 底层其实是把任务 pushdriver

push 前,系统会先去看要推送到哪个 driverdriver 就是我们排队的地方,可以是资料库、Redis 等。有哪些 driver 和连线参数可以在config/queue.php 设定。

知道是要 push 到哪个 driver 後,会去看这个 driver 是否已建立连线;有就用,没有就建立,最後才 push job 到 driver

// 这两个应该会是一样的
Queue::connection('Database')->push(new MyJobClass());
MyJobClass::dispatch()->onQueue('Database');

如果没有指定 driver,Laravel 会采用预设的 driver (config/queue.php['default'])

Queue::push(new MyJobClass());

Run Worker

让小精灵开始工作的咒语

$ php artisan queue:work

Reference


<<:  K8s - Kubernetes 指令参考笔记

>>:  全端入门Day10_全端之IDE环境首篇

15.移转Aras PLM大小事-Part料号全域搜寻

很常有人会问说 ㄟㄟ 怎麽不能用全域搜寻料号 这时我只能回答没有买这功能 就是原厂右上角的框框 那麽...

Day 17 | FPS灭火AR游戏开发 Part2 - 火焰粒子系统制作

目录 火焰制作 上一篇实作了简易的粒子系统(水柱),那今天就要实作稍微复杂多层次的粒子系统,那就开...

关於 Weekly Updates

在创业的过程中常常会迷失自我 YC SUS 里面有个 Weekly Updates 的机制 要求创业...

Day 08 | 触发事件

昨天提到了互动事件(Action)基本上能解决大部分页面中互动的需求,但若要能够跨元件来进行互动,例...

110/07 - 建立自己的 ResultContracts

前面讲完官方的14种Contracts,但我们也能建立属於自己的Contracts,以下范例是实作一...