Heim  >  Artikel  >  PHP-Framework  >  Analyse der Laravel5.5-Ereignisüberwachung, Aufgabenplanung und Warteschlange

Analyse der Laravel5.5-Ereignisüberwachung, Aufgabenplanung und Warteschlange

藏色散人
藏色散人nach vorne
2021-06-19 16:03:102281Durchsuche

Die folgende Tutorial-Kolumne von laravel stellt Ihnen die Ereignisüberwachung, Aufgabenplanung und Warteschlange von Laravel5.5 vor. Ich hoffe, dass sie Freunden in Not hilfreich sein wird!

Laravel5.5 Ereignisüberwachung, Aufgabenplanung, Warteschlange

1. Ereignisüberwachung

Prozess:

Analyse der Laravel5.5-Ereignisüberwachung, Aufgabenplanung und Warteschlange

1.1 Ereignis erstellen

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 erstellen

1.2 .1 Methode 1: Manuell erstellen

php artisan make:listener EmailAdminUserLogin --event=UserLogin

1.2.2 Methode 2: Empfehlen Sie die folgende Methode: Ereignisse und Listener automatisch generieren

//应用程序的事件监听器映射

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) {
            //
        });
    }
}

Ereignisse und Listener generieren: 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方式

Analyse der Laravel5.5-Ereignisüberwachung, Aufgabenplanung und Warteschlange

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个用户:

Analyse der Laravel5.5-Ereignisüberwachung, Aufgabenplanung und Warteschlange

    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个队列任务:

Analyse der Laravel5.5-Ereignisüberwachung, Aufgabenplanung und Warteschlange

3.4 运行队列处理器

php artisan queue:work

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

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

php artisan queue:work --once

Analyse der Laravel5.5-Ereignisüberwachung, Aufgabenplanung und Warteschlange

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

2. Aufgabenplanungsfunktion (geplante Aufgabe) von Laravel. https://img.php.cn/upload/image/422/791/800/1624089627485691.png" title="1624089627485691.png" alt="Analyse der Laravel5.5-Ereignisüberwachung, Aufgabenplanung und Warteschlange"/>

2.2 Befehlsmethode

Befehl generieren : 🎜php artisan make:command SayHello🎜rrreee🎜🎜Kernel.php🎜🎜rrreee🎜🎜Ausführung: 🎜php artisan scheme:run🎜🎜3. Aufgaben in die Warteschlange stellen 🎜🎜 3.1 Notwendige Einstellungen für den Treiber 🎜🎜                                                                                                       3 Verteilen Sie Aufgaben🎜🎜 an Sie. Nachdem Sie die Aufgabenklasse geschrieben haben, können Sie sie über die Hilfsfunktion dispatch verteilen. Der einzige Parameter, der an dispatch übergeben werden muss, ist eine Instanz dieser Aufgabenklasse:
🎜Verwenden Sie die Modellfabrik, um 30 Benutzer zu generieren: 🎜🎜🎜Analyse der Laravel5.5-Ereignisüberwachung, Aufgabenplanung und Warteschlange🎜rrreeerrreee🎜 🎜DatenbanktabelleJobs Code>generiert 5 Warteschlangen Aufgabe: 🎜🎜🎜<img src="https://img.php.cn/upload/image/471/635/251/1624089668506150.png" title="1624089668506150.png" alt="c7d38a7878f8e39890022 65ee886da0 .png"> 🎜🎜3.4 Ausführen des Warteschlangenprozessors 🎜rrreee🎜🎜Tipps: 🎜Beachten Sie, dass der Befehl <code>queue:work nach dem Start so lange ausgeführt wird, bis Sie ihn manuell stoppen oder die Konsole schließen 🎜🎜🎜Verarbeiten einer einzelnen Aufgabe: 🎜Mit der Option --once können Sie festlegen, dass nur eine einzelne Aufgabe in der Warteschlange verarbeitet werden soll🎜rrreee🎜Analyse der Laravel5.5-Ereignisüberwachung, Aufgabenplanung und Warteschlange🎜🎜🎜Erweiterung: 🎜Verwenden Sie Beanstalkd Verwaltungswarteschlange, Supervisor code> wird verwendet, um die Aufgaben in der Warteschlange zu überwachen und uns automatisch bei der Ausführung zu helfen, wenn sich Aufgaben in der Warteschlange befinden, wodurch die manuelle Eingabe des <code>php artisan entfällt Befehl, um sicherzustellen, dass unsere Warteschlange korrekt ausgeführt werden kann🎜🎜 „Verwandte Empfehlungen: 🎜Die neuesten fünf Laravel-Video-Tutorials🎜“🎜🎜

Das obige ist der detaillierte Inhalt vonAnalyse der Laravel5.5-Ereignisüberwachung, Aufgabenplanung und Warteschlange. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen