共计 1165 个字符,预计需要花费 3 分钟才能阅读完成。
一、应用目标:异步执行耗时操作
二、操作
1、生成 jobphp artisan make:job UserLoginSendEmail
namespace App\Jobs; | |
use Illuminate\Bus\Queueable; | |
use Illuminate\Contracts\Queue\ShouldQueue; | |
use Illuminate\Foundation\Bus\Dispatchable; | |
use Illuminate\Queue\InteractsWithQueue; | |
use Illuminate\Queue\SerializesModels; | |
class UserLoginSendEmail implements ShouldQueue | |
{ | |
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; | |
public $data; | |
/** | |
* Create a new job instance. | |
* | |
* @return void | |
*/ | |
public function __construct($data) | |
{$this->data = $data;} | |
/** | |
* Execute the job. | |
* | |
* @return void | |
*/ | |
public function handle() | |
{info('UserLoginSendEmail'.date('Y-m-d H:i:s').json_encode($this->data,JSON_UNESCAPED_UNICODE)); | |
} | |
} |
2、控制器中增加 job 散发
public function register(Request $request){ | |
$data = [ | |
'id' => '1', | |
'username' => 'testname', | |
'email' => '1078962834@qq.com' | |
]; | |
// 发送邮件 job | |
UserLoginSendEmail::dispatch($data); | |
} |
3、运行队列执行散发的 job
php artisan queue:work | |
[2021-05-16 08:50:30][BF9EeQDymybeYBBpKiAetg0zdjWUM8dL] Processing: App\Jobs\UserLoginSendEmail | |
[2021-05-16 08:50:30][BF9EeQDymybeYBBpKiAetg0zdjWUM8dL] Processed: App\Jobs\UserLoginSendEmail |
三、event、job 区别
1、job 是异步执行。适宜耗时长的工作。例如,批量发送邮件,短信。
2、event 是在 request 的生命周期内执行。适宜耗时短的操作。例如,更改数据字段状态。
3、event 的益处是,能够复用各种监听。例如,事件 A1 能够触发 B1, B2; 事件 A2 能够触发 B1, B2, B3。
正文完