laravel에서는 이를 구현하기 위해 대기열만 조작하면 됩니다. 구현하기 전에 간단한 구성, config/ queue.php 수정에 대한 자세한 내용은 공식 문서를 확인하세요. 여기서는 자세한 내용을 설명하지 않겠습니다. <code>config/queue.php
进行修改,具体查看官方文档,这里我不进行详细说明,下面我们直接进入正题。
首先,通过执行php artisan make:job 任务类名称
我们可以实现一个队列任务,执行该命令后,将会在app目录下生成Jobs目录并创建一个新的任务类,该任务类会自动继承IlluminateContractsQueueShouldQueue
接口,我们的队列会调用该任务类的handle方法,因此我们只需要在handle里面去实现我们具体的业务逻辑,就可以轻松的实现任务类。而此时,我们这是对我们任务类进行处理,那我们该怎么去分配任务进行处理呢?
在laravel中,任务的分发,也只需要通过简单的已实现的方法进行任务分配,我们只需要将任务指定对应的队列进行分发处理,具体的实现方式只需要以下简单的几行代码,便可以实现任务分发。
//任务指定到对应的队列 $job = (new TestQueue())->onQueue('队列名称'); //分发任务 dispatch($job);
实现的队列的分发之后,我们通过运行php artisan queue:work
队列处理器,该处理器便会对分发到队列里的任务进行处理,它会一直运行直到它被手动停止或终端关闭。需要注意的是,由于队列处理器是作为一个常驻进程并且在内存中保存着已经启动的应用状态,当我们修改对应的代码时,我们需要重启队列处理器才会载入修改后的代码逻辑。所以当我们对相应的任务类进行修改时,我们需要重启以保证正确性。
Supervisor 配置,这里官方文档讲得挺明白的,我就没必要在复述一次官方文档传送门
这里我直接引用官方文档的话语,简明易懂。
过去,你可能需要在服务器上为每一个调度任务去创建 Cron 入口。但是这种方式很快会变得不友好,因为这些任务调度不在源代码中,并且你每次都需要通过 SSH 链接登录到服务器中才能增加 Cron 入口。
Laravel 命令行调度器允许你在 Laravel 中对命令调度进行清晰流畅的定义。且使用这个任务调度器时,你只需要在你的服务器上创建单个 Cron 入口。你的任务调度在 app/Console/Kernel.php 的 schedule 方法中进行定义。
任务调度定义。在laravel官方文档中,我们更常用的是任务Artisan命令调度和队列调度。
//artisan命令调度 $schedule->command('emails:send Taylor --force')->daily(); //队列调度 $schedule->job(new Heartbeat)->everyFiveMinutes(); // 分发任务到「heartbeats」队列... $schedule->job(new Heartbeat, 'heartbeats')->everyFiveMinutes();
任务调用频率,如上步骤的daily()
、everyFiveMinutes()
php artisan make:job task class name
을 실행하여 대기열 작업을 구현할 수 있습니다. 이 명령을 실행하면 Jobs 디렉터리가 생성되어 앱에 생성됩니다. 디렉토리 IlluminateContractsQueueShouldQueue
인터페이스를 자동으로 상속하는 새로운 작업 클래스. 대기열은 작업 클래스의 핸들 메서드를 호출하므로 작업 클래스에서 특정 비즈니스 로직만 구현하면 됩니다. 쉽게 구현될 수 있습니다. 현재 태스크 클래스를 처리하고 있는데 처리할 태스크를 어떻게 할당해야 할까요? php artisan queue:work
대기열 프로세서를 실행하여 대기열에 배포된 작업을 처리합니다. 수동으로 중지되거나 터미널이 닫힙니다. 큐 프로세서는 상주 프로세스이고 시작된 애플리케이션 상태를 메모리에 저장하므로 해당 코드를 수정할 때 수정된 코드 로직을 로드하려면 큐 프로세서를 다시 시작해야 합니다. 따라서 해당 작업 클래스를 수정할 때 정확성을 보장하기 위해 다시 시작해야 합니다. 🎜🎜과거에는 서버의 각 예약된 작업에 대해 Cron 항목을 생성해야 할 수도 있었습니다. 그러나 이러한 작업 스케줄러는 소스 코드에 없고 Cron 항목을 추가하려면 매번 SSH 링크를 통해 서버에 로그인해야 하기 때문에 이 접근 방식은 금세 불편해집니다.
Laravel 명령줄 스케줄러를 사용하면 Laravel에서 명령 스케줄링을 명확하고 원활하게 정의할 수 있습니다. 그리고 이 작업 스케줄러를 사용할 때 서버에 단일 Cron 항목만 생성하면 됩니다. 작업 일정은 app/Console/Kernel.php의 일정 방법에 정의되어 있습니다. 🎜
daily()
, everyFiveMinutes()
등과 같은 작업 호출 빈도는 모두 호출 빈도를 제한합니다. 문자 그대로 이해하는 것은 어렵지 않습니다. 실제로는 1분에 한 번 또는 매일 호출되도록 설정되어 있습니다. 구체적인 호출은 다음과 같습니다(길이를 요약하면). 자세한 내용은 공식 문서를 확인하실 수도 있습니다. 🎜메소드 描 설명-& gt; cron (' * * * * * *') | 맞춤형 CRON 계획 실행 작업 |
---|---|
->everyFiveMinutes(); | |
->everyTenMinutes(); | |
-> ;everyFifteenMi 견과류 (); | |
->everyThirtyMinutes(); | |
->hourly(); | |
->hourlyAt(17); | |
->daily(); | |
->dailyAt('13:00'); | |
->twiceDaily(1, 13); | |
->weekly(); | |
->weeklyOn(1, '8:00'); | |
->monthly(); | |
->monthlyOn(4, '15:00'); | |
->분기별(); | |
->연간(); | |
->timezone('America/New_York'); | |
(3) 요약 |
* * * * * cd /项目地址 && php artisan schedule:run >> /dev/null 2>&1
위 내용은 laravel6의 대기열 및 작업 예약에 대한 심층적인 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!