Задание laravel5.3 (исключение перехвата при отправке обратных вызовов), задержка не работает

Я работаю с заданиями по отправке обратных веб-запросов (GET) на URL-адреса, определенные пользователем.
Чтобы сохранить нагрузку на мой сервер, я хотел бы отключить доступ API к пользователю после 5 попыток (что все не удалось).
Вот полный код моей работы (исключая импорт & некоторые ненужные части кода (отключение доступа к API и т. д.).

use Exception;

class SendGetCallback implements ShouldQueue
{
use InteractsWithQueue, Queueable, SerializesModels;

public $address;
public $new_transaction;

//Address $address, Transaction $new_transaction
public function __construct ($address, $new_transaction)
{
$this->address = $address;
$this->new_transaction = $new_transaction;
}

public function handle()
{
Log::info("run: " . $this->attempts());
if ($this->attempts() <= 5) {

if ($this->attempts() > 1) {
Log::info("retry part");

//retry to send the callback
try{
Log::info("try part");

//prepare webrequest

if ($res->getStatusCode() != 200 || $res->getBody()->getContents() != "*ok*")
throw new Exception('callback url not reachable');

}
//if job failed again, release job after 300 seconds
catch(Exception $e){
Log::info("catch part");
$this->release(300);
}
}
//first run of job, just process normal
else{

//prepare webrequest

if ($res->getStatusCode() != 200 || $res->getBody()->getContents() != "*ok*")
throw new Exception('callback url not reachable');

}
}
//disable API access and inform user
else{
Log::info("disable access");
Mail::to($this->address->user->email)->send(new ApiAccessDisabled($this->address->user, $this->address->merchant_access));

$merchant_access = MerchantAccess::where('id', $this->address->merchant_access->id)->first();

$merchant_access->update([
'is_online' => false,
]);
}
}

public function failed(Exception $exception)
{
Log::info("failed called!");
}
}

Я думаю, что по какой-то причине задержка, которую я использую, не сработала. Работа просто заканчивается без ожидания.

Вот часть файла журнала:

[2017-01-01 18:25:02] local.INFO: run: 2
[2017-01-01 18:25:02] local.INFO: retry part
[2017-01-01 18:25:02] local.INFO: try part
[2017-01-01 18:25:03] local.INFO: catch part
[2017-01-01 18:25:14] local.INFO: run: 3
[2017-01-01 18:25:14] local.INFO: retry part
[2017-01-01 18:25:14] local.INFO: try part
[2017-01-01 18:25:14] local.INFO: catch part
[2017-01-01 18:25:24] local.INFO: run: 4
[2017-01-01 18:25:24] local.INFO: retry part
[2017-01-01 18:25:24] local.INFO: try part
[2017-01-01 18:25:24] local.INFO: catch part
[2017-01-01 18:25:35] local.INFO: run: 5
[2017-01-01 18:25:35] local.INFO: retry part
[2017-01-01 18:25:35] local.INFO: try part
[2017-01-01 18:25:35] local.INFO: catch part
[2017-01-01 18:25:45] local.INFO: run: 6
[2017-01-01 18:25:45] local.INFO: disable access

Есть идеи, где что-то пойдет не так?
Вот как должен работать метод handle ():

—> проверить, не выполнен ли запрос get, например, когда веб-сервер пользователя находится в автономном режиме (выдает исключение) -> если да, установить задержку для задания в 5 минут

—> если задание запускалось 5 раз, доступ к API должен быть отключен (работает нормально)

0

Решение

Задача ещё не решена.

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector