Laravel队列-运行多个/批处理作业,失败时进行事务回滚,并在完成时进行提交

时间:2019-03-14 17:45:50

标签: php laravel queue laravel-queue

我的情况与需要取消的大订单有关。

  • 该订单包含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. 所有子作业成功完成后,如何运行一些最终代码(即发送通知,更改订单状态等)

0 个答案:

没有答案