SymmetricsWeb
SymmetricsWeb

Reputation: 636

Laravel setting Job as failed

How do I flag/set a Job as Failed?

I'm using closure function to dispatch a job that calls on external API, and I'd like to manually set if the job is success or failure based on the API response.

Here's my code, I'm using a simple example instead of API calls.

public function sendSMS( $numbers ) {

    dispatch(function () use ( $numbers ) {            
        $this->smsProcess($numbers, $this->note->content);
    });

}

public function smsProcess( $numbers, $message ) {

    $int = random_int( 1, 10 ) * random_int( 1, 10 );

    if ( $int < 50  ) {
        throw ValidationException::withMessages('Less than 50')->status(403);
    } else {
        throw ValidationException::withMessages('Greater than 50')->status(403);
    }
}

When The sendSMS function runs, I can see a pending Job for smsProcess

But when I run the queue:work the job is being Processed and did not fail,

So how do I manually trigger the Job as failed?

If I put some error code on smsProcess I can see the job is marked as Failed Due to php error

Upvotes: 1

Views: 1427

Answers (1)

silver
silver

Reputation: 5331

You should use the Exception class not the ValidationException

public function smsProcess( $numbers, $message ) {

    $int = random_int( 1, 10 ) * random_int( 1, 10 );

    if ( $int < 50  ) {
        throw new \Exception('Less than 50');
    } else {
        throw new \Exception('Greater than 50');
    }
}

Upvotes: 2

Related Questions