您好,欢迎访问一九零五行业门户网

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

下面由laravel教程栏目给大家介绍laravel5.5之事件监听、任务调度、队列,希望对需要的朋友有所帮助!
laravel5.5之事件监听、任务调度、队列
一、事件监听流程:
1.1 创建eventphp 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 创建listener1.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 scheduling2.1 call方式protected function schedule(schedule $schedule)    {        $schedule->call(function (){            \log::info('我是call方法实现的定时任务');        })->everyminute();    }
执行:php artisan schedule:run
2.2 crontab方式
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个用户:
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个队列任务:
3.4 运行队列处理器php artisan queue:work
tips:要注意,一旦 queue:work 命令开始,它将一直运行,直到你手动停止或者你关闭控制台
处理单一任务:你可以使用 --once 选项来指定仅对队列中的单一任务进行处理
php artisan queue:work --once
拓展:使用 beanstalkd 管理队列,supervisor 则是用来监听队列的任务,并在队列存在任务的情况下自动帮我们去执行,免去手动敲 php artisan 的命令,保证自己的队列可以正确执行
《相关推荐:最新的五个laravel视频教程》
以上就是解析laravel5.5之事件监听、任务调度、队列的详细内容。
其它类似信息

推荐信息