laravel6의 대기열 및 작업 예약에 대한 심층적인 설명

藏色散人
풀어 주다: 2021-08-13 09:03:56
앞으로
2441명이 탐색했습니다.

(1) 대기열 구현

laravel에서는 이를 구현하기 위해 대기열만 조작하면 됩니다. 구현하기 전에 간단한 구성, config/ queue.php 수정에 대한 자세한 내용은 공식 문서를 확인하세요. 여기서는 자세한 내용을 설명하지 않겠습니다. <code>config/queue.php进行修改,具体查看官方文档,这里我不进行详细说明,下面我们直接进入正题。

  1. 首先,通过执行php artisan make:job 任务类名称我们可以实现一个队列任务,执行该命令后,将会在app目录下生成Jobs目录并创建一个新的任务类,该任务类会自动继承IlluminateContractsQueueShouldQueue接口,我们的队列会调用该任务类的handle方法,因此我们只需要在handle里面去实现我们具体的业务逻辑,就可以轻松的实现任务类。而此时,我们这是对我们任务类进行处理,那我们该怎么去分配任务进行处理呢?
    laravel6의 대기열 및 작업 예약에 대한 심층적인 설명

  2. 在laravel中,任务的分发,也只需要通过简单的已实现的方法进行任务分配,我们只需要将任务指定对应的队列进行分发处理,具体的实现方式只需要以下简单的几行代码,便可以实现任务分发。

    //任务指定到对应的队列
    $job = (new TestQueue())->onQueue(&#39;队列名称&#39;);
    //分发任务
    dispatch($job);
    로그인 후 복사
  3. 实现的队列的分发之后,我们通过运行php artisan queue:work队列处理器,该处理器便会对分发到队列里的任务进行处理,它会一直运行直到它被手动停止或终端关闭。需要注意的是,由于队列处理器是作为一个常驻进程并且在内存中保存着已经启动的应用状态,当我们修改对应的代码时,我们需要重启队列处理器才会载入修改后的代码逻辑。所以当我们对相应的任务类进行修改时,我们需要重启以保证正确性。

  4. Supervisor 配置,这里官方文档讲得挺明白的,我就没必要在复述一次官方文档传送门

(二)任务调度

这里我直接引用官方文档的话语,简明易懂。

过去,你可能需要在服务器上为每一个调度任务去创建 Cron 入口。但是这种方式很快会变得不友好,因为这些任务调度不在源代码中,并且你每次都需要通过 SSH 链接登录到服务器中才能增加 Cron 入口。
Laravel 命令行调度器允许你在 Laravel 中对命令调度进行清晰流畅的定义。且使用这个任务调度器时,你只需要在你的服务器上创建单个 Cron 入口。你的任务调度在 app/Console/Kernel.php 的 schedule 方法中进行定义。

  1. 任务调度定义。在laravel官方文档中,我们更常用的是任务Artisan命令调度和队列调度。

    //artisan命令调度
    $schedule->command(&#39;emails:send Taylor --force&#39;)->daily();
    //队列调度
    $schedule->job(new Heartbeat)->everyFiveMinutes();
    // 分发任务到「heartbeats」队列...
    $schedule->job(new Heartbeat, &#39;heartbeats&#39;)->everyFiveMinutes();
    로그인 후 복사
  2. 任务调用频率,如上步骤的daily()everyFiveMinutes()

    1. 먼저 php artisan make:job task class name을 실행하여 대기열 작업을 구현할 수 있습니다. 이 명령을 실행하면 Jobs 디렉터리가 생성되어 앱에 생성됩니다. 디렉토리 IlluminateContractsQueueShouldQueue 인터페이스를 자동으로 상속하는 새로운 작업 클래스. 대기열은 작업 클래스의 핸들 메서드를 호출하므로 작업 클래스에서 특정 비즈니스 로직만 구현하면 됩니다. 쉽게 구현될 수 있습니다. 현재 태스크 클래스를 처리하고 있는데 처리할 태스크를 어떻게 할당해야 할까요?
      여기에 이미지 설명 삽입🎜
    2. 🎜laravel에서 작업 분배는 간단한 구현 방법을 통해서만 수행되어야 합니다. 특정 구현 방법은 다음과 같은 간단한 단계만 필요합니다. 코드, 작업 분산을 달성할 수 있습니다. 🎜rrreee
    3. 🎜큐가 배포된 후 php artisan queue:work 대기열 프로세서를 실행하여 대기열에 배포된 작업을 처리합니다. 수동으로 중지되거나 터미널이 닫힙니다. 큐 프로세서는 상주 프로세스이고 시작된 애플리케이션 상태를 메모리에 저장하므로 해당 코드를 수정할 때 수정된 코드 로직을 로드하려면 큐 프로세서를 다시 시작해야 합니다. 따라서 해당 작업 클래스를 수정할 때 정확성을 보장하기 위해 다시 시작해야 합니다. 🎜
    4. 🎜감독자 구성, 여기 공식 문서에 매우 명확하게 설명되어 있으므로 공식 문서 포털을 반복할 필요가 없습니다🎜
    🎜(2) 작업 예약🎜🎜 여기서는 간결하고 이해하기 쉬운 공식 문서를 직접 인용합니다. 🎜
    🎜과거에는 서버의 각 예약된 작업에 대해 Cron 항목을 생성해야 할 수도 있었습니다. 그러나 이러한 작업 스케줄러는 소스 코드에 없고 Cron 항목을 추가하려면 매번 SSH 링크를 통해 서버에 로그인해야 하기 때문에 이 접근 방식은 금세 불편해집니다.
    Laravel 명령줄 스케줄러를 사용하면 Laravel에서 명령 스케줄링을 명확하고 원활하게 정의할 수 있습니다. 그리고 이 작업 스케줄러를 사용할 때 서버에 단일 Cron 항목만 생성하면 됩니다. 작업 일정은 app/Console/Kernel.php의 일정 방법에 정의되어 있습니다. 🎜
    1. 🎜작업 일정 정의. 공식 라라벨 문서에서는 task Artisan 명령어 스케줄링과 큐 스케줄링을 더 일반적으로 사용합니다. 🎜rrreee
    2. 🎜위 단계의 daily(), everyFiveMinutes() 등과 같은 작업 호출 빈도는 모두 호출 빈도를 제한합니다. 문자 그대로 이해하는 것은 어렵지 않습니다. 실제로는 1분에 한 번 또는 매일 호출되도록 설정되어 있습니다. 구체적인 호출은 다음과 같습니다(길이를 요약하면). 자세한 내용은 공식 문서를 확인하실 수도 있습니다. 🎜
    -& gt; 1분마다 작업5분마다 작업 실행10분마다 작업 실행15분마다 작업 실행30분마다 작업 실행1시간마다 실행 작업 매시 17분에 태스크가 실행됩니다매일 자정에 태스크가 실행됩니다. (번역자 주: 매일 자정) 매일 13:00에 작업 실행에 작업 실행 매일 1:00 및 13:00 일주일에 한 번 작업을 실행합니다실행 매주 월요일 8시에 한 번 작업한 달에 한 번 작업 실행실행 매월 1회 4일 15시분기마다 작업 수행매년 작업 수행시간대 설정마지막으로 스케줄러를 시작하여 실행합니다. 사실 별로 이야기할 내용은 없지만, 이 두 가지는 대개 우리 프로젝트에 있어서 매우 중요한 부분입니다. 공식 문서는 너무 번거롭고 불필요하기 때문에 일반적으로 사용되는 문서에 대해 간단히 말씀드리겠습니다. Laravel은 이러한 일반적인 작업을 캡슐화하여 많은 문제를 줄였습니다. 구현 논리를 이해하는 데 관심이 있다면 최소한 먼저 사용 방법을 알아 두십시오.
    메소드 描 설명-& 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) 요약
      관련 권장 사항:
    1. 최신 5개 Laravel 비디오 튜토리얼* * * * * cd /项目地址 && php artisan schedule:run >> /dev/null 2>&1

위 내용은 laravel6의 대기열 및 작업 예약에 대한 심층적인 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:csdn.net
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿