Laravel Queues - запуск нескольких / пакетных заданий с откатом транзакции при сбое и фиксацией при завершении - PullRequest
0 голосов
/ 14 марта 2019

Мой сценарий связан с большим заказом, который необходимо отменить.

  • Заказ содержит 200 различных строк товара, т.е. orderItems.
  • Каждая строка заказа отменяетсяи запускает расчет запаса и последующее движение запаса.
  • Когда все строки заказа были успешно выполнены, статус заказа может быть обновлен до «отменен».

Для нескольких строкзаказа эта операция может быть выполнена синхронно, без проблем.Когда заказы велики, то требуемая вычислительная мощность означает, что мой лучший вариант - разделить процесс на отдельные операции в очереди.

т.е.

Выполнить задание

OrderController.php

CancelOrder::dispatch($order);

Jobs / CancelOrder.php handle ()

$this->order->orderItems()->each(function(OrderItem $orderItem){
    CancelAndReallocateOrderItem::dispatch($orderItem, $this->user);
});

Jobs / CancelAndReallocateOrderItem.php handle ()

$this->orderItem->cancelAllocatedAndReservedStock();
$this->orderItem->product->reAllocateOrderItems();

Для этого заказа с 200 строками, 200 экземпляров CancelAndReallocateOrderItem будут запущены, что позволяет обрабатывать отмену через пару минут.

Я сейчас пытаюсь решить, если это возможно:

  1. Если какой-либо издочерние задания выдают ошибку, могу ли я откатить весь пакет транзакций.
  2. Когда все дочерние задания успешно завершены, как я могу выполнить какой-то окончательный код (например, отправить уведомление, изменить статус заказа и т. д.)
...