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

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

藏色散人
Freigeben: 2021-06-25 10:03:24
nach vorne
2390 Leute haben es durchsucht

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
Nach dem Login kopieren

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));
    }
Nach dem Login kopieren

1.2 Listener erstellen

1.2 .1 Methode 1: Manuell erstellen

php artisan make:listener EmailAdminUserLogin --event=UserLogin
Nach dem Login kopieren

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) {
            //
        });
    }
}
Nach dem Login kopieren

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();
    }
Nach dem Login kopieren

执行: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;);
    }
}
Nach dem Login kopieren

Kernel.php

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

执行:php artisan schedule:run

三、队列任务

3.1 驱动的必要设置

    QUEUE_DRIVER=database

如:数据库驱动

php artisan queue:table

php artisan migrate
Nach dem Login kopieren

3.2 创建任务

     生成任务类:

php artisan make:job SendReminderEmail
Nach dem Login kopieren
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);
    }
}
Nach dem Login kopieren

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';
    }
Nach dem Login kopieren
Route::get('/job', 'UserController@store');
Nach dem Login kopieren

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

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

3.4 运行队列处理器

php artisan queue:work
Nach dem Login kopieren

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

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

php artisan queue:work --once
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage