Уже перемещено, невыполненное задание все еще обрабатывается в фоновом режиме.Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Уже перемещено, невыполненное задание все еще обрабатывается в фоновом режиме.

Сообщение Anonymous »

Сейчас я работаю над проектом Laravel, который использует большой конвейер внутри одного задания. Внутри этого конвейера выполняются различные вызовы сторонних API, а результаты записываются в простую базу данных MariaDB.
С функциональностью проблем нет, все работает так, как задумано.
/>Но чего я не понимаю, так это того факта, что если задание завершается сбоем в какой-то момент конвейера, оно довольно рано перемещается в таблицу «failed_jobs», хотя задание все еще выполняется в фоновом режиме, пока не достигнет точка провала.
Есть ли способ предотвратить такое поведение или это просто следствие комбинации конвейера/очереди? Меня это не сильно беспокоит, но было бы лучше, если бы задание перемещалось ПОСЛЕ каждого открытого шага.
Pipeline Job
class CompleteInboundLabelProcess implements ShouldQueue
{
use Queueable;
use InteractsWithQueue;

/**
* The number of times the job may be attempted.
*
* @var int
*/
public $tries = 1;

/**
* Indicate if the job should be marked as failed on timeout.
*
* @var bool
*/
public $failOnTimeout = true;

/**
* The number of seconds the job can run before timing out.
*
* @var int
*/
public $timeout = 900;

protected InboundShippingLabelContainer $container;

/**
* Create a new job instance.
*/
public function __construct(InboundShippingLabelContainer $container)
{
$this->container = $container;
}

/**
* Execute the job.
*/
public function handle(): void
{
try{
$filledContainer = app(Pipeline::class)
->send($this->container)
->through([
ListPrepDetailsPipeline::class,
SetPrepDetailsPipeline::class,
GetInboundOperationStatusPipeline::class,
ListPrepDetailsPipeline::class,
CreateInboundPlanPipeline::class,
GetInboundOperationStatusPipeline::class,
GeneratePackingOptionsPipeline::class,
GetInboundOperationStatusPipeline::class,
ListPackingOptionsPipeline::class,
ListPackingGroupItemsPipeline::class,
SelectPackingOptionPipeline::class,
ConfirmPackingOptionPipeline::class,
GetInboundOperationStatusPipeline::class,
SetPackingInformationPipeline::class,
GetInboundOperationStatusPipeline::class,
GeneratePlacementOptionsPipeline::class,
GetInboundOperationStatusPipeline::class,
ListPlacementOptionsPipeline::class,
GenerateTransportationOptionsPipeline::class,
ListTransportationOptionsPipeline::class,
SelectPlacementOptionPipeline::class,
ConfirmPlacementOptionPipeline::class,
GetInboundOperationStatusPipeline::class,
SelectTransportationOptionPipeline::class,
GetShipmentPipeline::class,
ConfirmTransportationOptionPipeline::class,
GetInboundOperationStatusPipeline::class,
GetShipmentPipeline::class,
ListShipmentBoxesPipeline::class,
GetLabelDownloadURLPipeline::class,
])
->then(function(InboundShippingLabelContainer $container){
$updateDB = InboundPlan::where('inboundplanid',$container->inboundPlanId)->where('account',$container->__get('account'))->update([
'shipmentid' => $container->confirmedshipmentid,
'confirmedplacementoptionid' => $container->confirmedplacementoptionid,
'confirmedpackingoptionid' => $container->confirmedpackingoptionid,
'confirmedtransportationoptionid' => $container->confirmedtransportationoptionid,
'labeldownloadurl' => $container->labeldownloadurl,
'packingoptions' => $container->packingoptions,
'placementoptions' => $container->placementoptions,
'shipment' => $container->shipment,
]);

return $container;
});
}catch(Exception $e){
if(boolval(env('APP_DEBUG'))){
DebugLog::create([
'function' => 'CompleteInboundLabelProcess',
'object' => json_encode($this->container,JSON_PRETTY_PRINT),
'message' => $e->getMessage()
]);
}

throw new \Exception($e->getMessage());
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/793 ... background
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»