대기열이 있는 Laravel 알림 시스템
이전 게시물에서 설명했듯이 알림을 사용하여 실패한 알림이 전달되지 않도록 대기열 시스템도 구현하는 것이 좋습니다.
대기열 알림을 처음 읽는 것은 구현하기가 복잡해 보이지만 그렇게 어렵지는 않습니다.
이 튜토리얼을 통해 가능한 한 쉽게 할 수 있도록 도와드리겠습니다.
시작하자
Queue를 사용하려면 laravel 명령으로 테이블 작업을 마이그레이션해야 합니다.
php artisan queue:table
php artisan migrate
그런 다음 데이터베이스로 .ENV 파일을 설정하십시오.
QUEUE_CONNECTION=database
이제 알림 예제를 만들고 인터페이스 및 특성을 구현하는 방법을 살펴보겠습니다.
<?php
namespace App\Notifications;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Notification;
use Illuminate\Notifications\Messages\BroadcastMessage;
class RealTimeNotification extends Notification implements ShouldBroadcast
{
use Queueable;
public string $message;
public function __construct(string $message)
{
$this->message = $message;
}
public function via($notifiable): array
{
return ['broadcast'];
}
public function toBroadcast($notifiable): BroadcastMessage
{
return new BroadcastMessage([
'message' => "$this->message"
]);
}
/**
* Get the array representation of the notification.
*
* @param mixed $notifiable
* @return array
*/
public function toArray($notifiable)
{
return [
'message' => "$this->message",
];
}
}
toArray 메소드를 사용하면 대기열에 저장하기 위해 알림을 형식화하는 방법을 지정할 수 있습니다. 또한 이 방법은 알림 데이터베이스 테이블에 알림을 저장하는 데 사용됩니다(웹소켓을 사용한 알림 시스템 게시물에서 이 기능을 이미 설명했습니다).
알림 클래스에 "ShouldBroadcast"인터페이스와 "Queueable"특성을 추가하면 자동으로 작업 테이블에 모든 알림을 보낼 수 있으며 알림이 실패할 경우 영원히 잃지 않고 계속 관리할 수 있습니다. 하기 위해서.
장인 대기열: 작업
지금부터 데이터베이스 작업에 두 개의 테이블이 있고 fail_jobs 테이블이 있습니다. 알림을 트리거하면 작업 테이블에서 먼저 전달되고 대기열에서 관리됩니다. 이 중 하나가 실패하면 길을 잃지 않도록 failed_jobs 테이블로 이동됩니다.
이 모든 프로세스를 관리하려면 artisan 명령을 시작해야 합니다.
php artisan queue:work
이 명령 후에 최대로 설정할 여러 구성을 지정할 수 있지만 이를 위해 laravel 문서를 살펴보는 것이 좋습니다.
laravel-queue-doc
artisan queue:work는 알림을 하나씩 받고 필요에 따라 보냅니다.
여기에 구성의 예가 있습니다.
php artisan queue:work --sleep=3 --tries=3 --backoff=3 --max-time=3600 --max-jobs=5 --stop-when-empty****
보시다시피 저는 예를 들어 --tries 3을 설정했습니다. 이런 식으로 시스템이 실패하고 failed_jobs 테이블로 이동하기 전에 알림 전송을 3번 시도하도록 할 수 있습니다.
때로는 초과된 작업자 시간 초과와 같은 다양한 원인으로 인해 작업이 실패할 수 있습니다. 이 경우 다른 시간에 작업을 관리할 수 있으며 명령을 실행하기만 하면 됩니다.
php artisan queue:retry
이런 식으로 작업을 작업 테이블로 되돌리고 queue:work를 두 번째로 재처리하고 두 번째 기회를 제공합니다.
!주의: 이 모든 프로세스는 이 튜토리얼에서 수동으로 실행되지만 서버에서 관리해야 합니다. 감독자를 설치하고 문서에 laravel이 제공하는 구성을 추가하는 것이 좋습니다.
supervisor configuration
관리자를 설치하는 것은 그리 어렵지 않으며 그 후에 이와 같은 일부 설정을 추가할 Supervisor.conf 파일이 생깁니다.
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/html/artisan queue:work --sleep=3 --tries=3 --backoff=3 --max-time=3600 --max-jobs=5 --stop-when-empty
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
startretries=3
user=root
numprocs=1
redirect_stderr=true
stdout_logfile=/var/www/html/storage/logs/worker.log
stderr_logfile=/var/www/html/storage/logs/worker-error.log
stopwaitsecs=3600
이 튜토리얼이 도움이 되기를 바라지만 내가 놓친 것이 있거나 리팩터링할 아이디어가 있으면 으로 연락해 주십시오.
Reference
이 문제에 관하여(대기열이 있는 Laravel 알림 시스템), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/enrico_dev86/laravel-notification-system-with-queue-28p4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)