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

藏色散人
풀어 주다: 2021-06-25 10:03:24
앞으로
2342명이 탐색했습니다.

다음 튜토리얼 칼럼인 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으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿