Как вы останавливаете очередь Laravel

У меня есть очередь, которая отправляет запросы на удаленный сервис. Иногда эта услуга проходит техническое обслуживание. Я хочу, чтобы все задачи очереди приостанавливались и повторялись через 10 минут при возникновении такой ситуации. Как мне это реализовать?

2

Решение

<?php

namespace App\Jobs;

use ...

class SendRequest implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

const REMOTE_SERVER_UNAVAILABLE = 'remote_server_unavailable';

private $msg;
private $retryAfter;

public function __construct($msg)
{
$this->msg = $msg;
$this->retryAfter = 10;
}

/**
* Execute the job.
*
* @return void
*/
public function handle(){
try {
// if we have tried sending the request and get a RemoteServerException, we will
// redispatch the job directly and return.
if(Cache::get(self::REMOTE_SERVER_UNAVAILABLE)) {
self::dispatch($this->msg)->delay(Carbon::now()->addMinutes($this->retryAfter));
return;
}
// send request to remote server
// ...
} catch (RemoteServerException $e) {
// set a cache value expires in 10 mins if not exists.
Cache::add(self::REMOTE_SERVER_UNAVAILABLE,'1', $this->retryAfter);
// if the remote service undergoes a maintenance, redispatch a new delayed job.
self::dispatch($this->msg)->delay(Carbon::now()->addMinutes($this->retryAfter));
}
}
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]