>  기사  >  PHP 프레임워크  >  Laravel5.5 이벤트 모니터링, 작업 스케줄링 및 대기열 분석

Laravel5.5 이벤트 모니터링, 작업 스케줄링 및 대기열 분석

藏色散人
藏色散人앞으로
2021-06-19 16:03:102341검색

다음 튜토리얼 칼럼인 laravel에서는 Laravel5.5의 이벤트 모니터링, 작업 스케줄링, 큐에 대해 소개하겠습니다. 도움이 필요한 친구들에게 도움이 되길 바랍니다!

Laravel5.5 이벤트 모니터링, 작업 스케줄링, 대기열

1. 이벤트 모니터링

Process:

Laravel5.5 이벤트 모니터링, 작업 스케줄링 및 대기열 분석

1.1 이벤트 생성

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 생성 리스너

1.2 .1 방법 1: 수동으로 생성

php artisan make:listener EmailAdminUserLogin --event=UserLogin

1.2.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 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

<?php namespace App\Console\Commands;

use Illuminate\Console\Command;

class SayHello extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = &#39;message:hi&#39;;

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = &#39;Command description&#39;;

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        //书写处理逻辑
        \Log::info(&#39;早上好,用户&#39;);
    }
}

Kernel.php

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

执行:php artisan schedule:run

三、队列任务

3.1 驱动的必要设置

    QUEUE_DRIVER=database

如:数据库驱动

php artisan queue:table

php 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

2. 라라벨의 작업 스케줄링(계획된 작업) 기능 Task Scheduling

2.1 call methodrrreee

Execution: 🎜php artisan Schedule:run🎜🎜2.2 crontab method🎜🎜Laravel5.5 이벤트 모니터링, 작업 스케줄링 및 대기열 분석🎜🎜2.2 명령 방법 🎜🎜🎜 명령 생성 : 🎜php artisan make:command SayHello🎜rrreee🎜🎜Kernel.php🎜🎜rrreee🎜🎜실행: 🎜php artisan Schedule:run🎜🎜3. 3.1 드라이버에 필요한 설정🎜🎜                                                                                                   3 작업 배포🎜🎜 작업 클래스를 작성한 후 디스패치 도우미 기능을 통해 배포할 수 있습니다. dispatch에 전달되어야 하는 유일한 매개변수는 이 작업 클래스의 인스턴스입니다.
🎜모델 팩토리를 사용하여 30명의 사용자를 생성합니다: 🎜🎜🎜Laravel5.5 이벤트 모니터링, 작업 스케줄링 및 대기열 분석🎜rrreeerrreee🎜🎜 데이터베이스 테이블작업 code>5개의 대기열 생성 작업: 🎜🎜🎜<img src="https://img.php.cn/upload/image/471/635/251/1624089668506150.png" title="1624089668506150.png" alt="c7d38a7878f8e3989002 265ee886da0 .png"> 🎜🎜3.4 대기열 프로세서 실행 🎜rrreee🎜🎜팁: 🎜<code>queue:work 명령이 시작되면 수동으로 중지하거나 콘솔을 닫을 때까지 계속 실행된다는 점에 유의하세요. 🎜🎜🎜단일 작업 처리: 🎜--once 옵션을 사용하여 대기열의 단일 작업만 처리되도록 지정할 수 있습니다🎜rrreee🎜Laravel5.5 이벤트 모니터링, 작업 스케줄링 및 대기열 분석🎜🎜🎜확장: 🎜 콩나무 사용 관리 대기열인 Supervisor는 대기열의 작업을 모니터링하는 데 사용되며 대기열에 작업이 있을 때 자동으로 해당 작업을 실행하도록 도와주므로 수동으로 php artisan을 입력할 필요가 없습니다. 대기열이 올바르게 실행될 수 있는지 확인하는 명령🎜🎜 "관련 권장 사항: 🎜최신 5개 Laravel 비디오 튜토리얼🎜"🎜🎜

위 내용은 Laravel5.5 이벤트 모니터링, 작업 스케줄링 및 대기열 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제