Maison  >  Article  >  cadre php  >  Analyse de la surveillance des événements Laravel5.5, de la planification des tâches et de la file d'attente

Analyse de la surveillance des événements Laravel5.5, de la planification des tâches et de la file d'attente

藏色散人
藏色散人avant
2021-06-19 16:03:102281parcourir

La colonne tutorielle suivante de laravel vous présentera la surveillance des événements, la planification des tâches et la file d'attente de Laravel5.5. J'espère qu'elle sera utile aux amis dans le besoin !

Surveillance des événements Laravel5.5, planification des tâches, file d'attente

1. Surveillance des événements

Processus :

Analyse de la surveillance des événements Laravel5.5, de la planification des tâches et de la file dattente

1.1 Créer un événement

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 Créer un écouteur

1.2.1 Méthode 1 : Manuellement create

php artisan make:listener EmailAdminUserLogin --event=UserLogin

1.2.2 Méthode 2 : Recommander la méthode suivante : Générer automatiquement les événements et les auditeurs

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

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

Générer les événements et les auditeurs : php artisan event:generate

2. Fonction de planification des tâches (tâche planifiée) de Laravel Planification des tâches

Méthode d'appel 2.1

protected function schedule(Schedule $schedule)
    {
        $schedule->call(function (){
            \Log::info('我是call方法实现的定时任务');
        })->everyMinute();
    }

Exécution : php artisan schedule:run

Mode crontab 2.2

Analyse de la surveillance des événements Laravel5.5, de la planification des tâches et de la file dattente

Mode commande 2.2

Générer la commande : 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();
}

Exécution : php artisan schedule:run

3.1 Paramètres du pilote nécessaires

 

QUEUE_DRIVER=database

Par exemple : pilote de base de données

php artisan queue:table

php artisan migrate
3.2 Créer une tâche

 

Générer une classe de tâches :

php artisan make:job SendReminderEmail
rrree3.3 Distribution des tâches

Après avoir écrit la classe de tâches, vous pouvez la distribuer via la fonction auxiliaire

. Le seul paramètre qui doit être transmis à

est une instance de cette classe de tâches : dispatchdispatchUtilisez la fabrique de modèles pour générer 30 utilisateurs :

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);
    }
}
rrreeAnalyse de la surveillance des événements Laravel5.5, de la planification des tâches et de la file dattenteLa table de base de données

génère 5 tâches de file d'attente : jobs

Analyse de la surveillance des événements Laravel5.5, de la planification des tâches et de la file dattente3.4 Exécuter le processeur de file d'attente

    public function store(Request $request)
    {
        $users = User::where('id','>',24)->get();

        foreach ($users as $user){
            $this->dispatch(new SendReminderEmail($user));
        }

        return 'Done';
    }

Conseils :

Sachez qu'une fois la commande lancée, elle s'exécutera jusqu'à ce que vous l'arrêtiez manuellement ou que vous fermiez la console queue:work

Gérer une seule tâche :

Vous pouvez le spécifier en utilisant l'option Ne traiter qu'une seule tâche dans la file d'attente

Route::get('/job', 'UserController@store');
--once

Analyse de la surveillance des événements Laravel5.5, de la planification des tâches et de la file dattente

Extension :

utilise pour gérer la file d'attente, et est utilisé pour surveiller les tâches de la file d'attente et nous aide automatiquement à les exécuter lorsqu'il y a des tâches dans la file d'attente, éliminant ainsi le besoin de taper manuellement la commande Beanstalkd pour garantir que notre file d'attente peut être exécutée correctement Supervisorphp artisan《 Recommandations associées :

Les cinq derniers didacticiels vidéo Laravel

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer