Сейчас я работаю над проектом 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
Уже перемещено, невыполненное задание все еще обрабатывается в фоновом режиме. ⇐ Php
Кемеровские программисты php общаются здесь
1737042226
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());
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79362220/already-moved-failed-job-get-still-processed-in-background[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия