解析Laravel5.5之事件监听、任务调度、队列

2022-05-15 0 475

下面由laravel教程栏目给大家介绍Laravel5.5之事件监听、任务调度、队列,希望对需要的朋友有所帮助!

Laravel5.5之事件监听、任务调度、队列

一、事件监听

流程:

解析Laravel5.5之事件监听、任务调度、队列

1.1 创建event

php artisan make:event UserLogin

LoginController.php

    /**     * The user has been authenticated.     *     * @param  \\Illuminate\\Http\\Request  $request     * @param  mixed  $user     * @return mixed     */    protected function authenticated(Request $request, $user)    {        event(new UserLogin($user));    }

1.2 创建listener

1.2.1 方式一:手动创建

php artisan make:listener EmailAdminUserLogin --event=UserLogin

1.2.2 方式二:推荐如下方式:自动生成事件和监听

//应用程序的事件监听器映射class EventServiceProvider extends ServiceProvider{    /**     * The event listener mappings for the application.     *     * @var array     */    protected $listen = [        'App\\Events\\UserLogin' => [            'App\\Listeners\\UserLogin\\EmailAdminUserLogin',            'App\\Listeners\\UserLogin\\TraceUser',            'App\\Listeners\\UserLogin\\AddUserLoginCounter',        ],        'App\\Events\\UserLogout' => [            'App\\Listeners\\UserLogout\\EmailAdminUserLogout',            'App\\Listeners\\UserLogout\\TraceUser',        ],    ];    /**     * Register any events for your application.     *     * @return void     */    public function boot()    {        parent::boot();        Event::listen('event.*', function ($eventName, array $data) {            //        });    }}

生成事件 & 监听器:php artisan event:generate

二、Laravel 的任务调度(计划任务)功能 Task Scheduling

2.1 call方式

protected function schedule(Schedule $schedule)    {        $schedule->call(function (){            \\Log::info('我是call方法实现的定时任务');        })->everyMinute();    }

执行:php artisan schedule:run

2.2 crontab方式

解析Laravel5.5之事件监听、任务调度、队列

2.2 command方式

生成命令:php artisan make:command SayHello

<?phpnamespace App\\Console\\Commands;use Illuminate\\Console\\Command;class SayHello extends Command{    /**     * The name and signature of the console command.     *     * @var string     */    protected $signature = 'message:hi';    /**     * The console command description.     *     * @var string     */    protected $description = 'Command description';    /**     * Create a new command instance.     *     * @return void     */    public function __construct()    {        parent::__construct();    }    /**     * Execute the console command.     *     * @return mixed     */    public function handle()    {        //书写处理逻辑        \\Log::info('早上好,用户');    }}

Kernel.php

protected function schedule(Schedule $schedule){    $schedule->command('message:hi')             ->everyMinute();}

执行:php artisan schedule:run

三、队列任务

3.1 驱动的必要设置

QUEUE_DRIVER=database

如:数据库驱动

php artisan queue:tablephp artisan migrate

3.2 创建任务

生成任务类:

php artisan make:job SendReminderEmail
class SendReminderEmail implements ShouldQueue{    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;    public $user;    /**     * Create a new job instance.     *     * @param User $user     */    public function __construct(User $user)    {        $this->user = $user;    }    /**     * Execute the job.     *     * @return void     */    public function handle()    {        \\Log::info('send reminder email to user' . $this->user->email);    }}

3.3 分发任务

你写好任务类后,就能通过 dispatch 辅助函数来分发它了。唯一需要传递给 dispatch 的参数是这个任务类的实例:
利用模型工厂生成30个用户:

解析Laravel5.5之事件监听、任务调度、队列

    public function store(Request $request)    {        $users = User::where('id','>',24)->get();        foreach ($users as $user){            $this->dispatch(new SendReminderEmail($user));        }        return 'Done';    }
Route::get('/job', 'UserController@store');

数据库表jobs生成5个队列任务:

解析Laravel5.5之事件监听、任务调度、队列

3.4 运行队列处理器

php artisan queue:work

Tips:要注意,一旦 queue:work 命令开始,它将一直运行,直到你手动停止或者你关闭控制台

处理单一任务:你可以使用 --once 选项来指定仅对队列中的单一任务进行处理

php artisan queue:work --once

解析Laravel5.5之事件监听、任务调度、队列

拓展:使用 Beanstalkd 管理队列,Supervisor 则是用来监听队列的任务,并在队列存在任务的情况下自动帮我们去执行,免去手动敲 php artisan 的命令,保证自己的队列可以正确执行

《相关推荐:最新的五个Laravel视频教程》

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

【声明:根据2013年1月30日《计算机软件保护条例》2次修订第17条规定: 为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存 储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬! 鉴于此,也希望大家按此说明研究软件!】
本站所有源码尽量保证原汁原味,如有特殊情况会作出声明及标注,网站资源不做任何二次加密(原版加密除外,不影响程序使用的不会做解密处理),方便您更好的学习参考。 在您的能力范围内,为了大环境的良性发展,请尽可能的选择正版资源。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

即刻码站__国内靠谱的站长资源下载平台 php教程 解析Laravel5.5之事件监听、任务调度、队列 https://www.jike1995.com/36478.html

常见问题
  • 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用
查看详情
  • 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度
查看详情

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务