В своем многосерверном приложении я использую систему очередей laravel для запуска фоновых заданий. Иногда в своей логике c я хочу, чтобы моя работа выдавала исключение, чтобы я мог регистрировать его через часового, используя laravel библиотеку , которая предлагает.
Так в моей работе :
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use App\Model\Etable\User;
use App\Model\User;
class MyJob implements ShouldQueue
{
use Dispatchable;
use InteractsWithQueue;
use Queueable;
/**
* @var int
*/
private $user_id;
/**
* @param int $user The user that has opted or deopted for newsletter consent
*/
public function __construct(int $id)
{
$this->user_id = $user_id;
}
public function handle(): void
{
/**
* @var User
*/
$user=User::useWritePdo()->find($this->user_id);
if(empty($user)){
throw new \Exception("No such a user with user id: {$this->user_id}");
}
// Rest of logic here
}
}
Как только возникнет исключение, я буду зарегестрирован в часовом, но он также будет возобновляться, поскольку логика laravel c для заданий должна это делать.
В моем случае я считаю ненужным тратить ресурсы на повторное порождение MyJob
в случае, если у пользователя нет значения для продолжения, потому что сам лог c не может быть выполнен в случае, если нет пользователь существует С другой стороны, при любой другой ошибке я хочу, чтобы моя работа продолжала повторяться до тех пор, пока я не смогу успешно запустить ее снова.
Итак, как я могу заставить свою работу не возродиться при указанных c ошибках? Еще лучше было бы также, если бы я мог использовать метод ведения журнала по умолчанию, который laravel предлагает для произвольной регистрации ошибки и в часовом режиме через выделенный часовой канал.