[英]How I make a Laravel Job to fail without restarting so I can use sentry to log the exception?
在我的多服務器應用程序中,我使用 laravel 的隊列系統來運行后台作業。 有時在我的邏輯中,我想讓我的工作拋出異常,這樣我就可以使用提供的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 的工作邏輯應該這樣做。
在我的情況下,我認為在用戶不存在的情況下保持重生MyJob
是浪費資源,因為如果沒有用戶存在,則無法執行邏輯本身。 另一方面,對於任何其他錯誤,我希望我的工作繼續重試,直到能夠再次成功運行。
那么我怎樣才能讓我的工作不因特定錯誤而重生呢? 如果我可以使用 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)){
if ($this->attempts() > 1) {
return;
}
throw new \Exception("No such a user with user id: {$this->user_id}");
}
// Rest of logic here
}
}
這是通過以下方式實現的:
if ($this->attempts() > 1) {
return;
}
所以你拋出一次異常,異常被記錄到哨兵,然后在第二次將被執行時,它只會退出並且永遠不會重生。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.