Laravel Nova: Действия в очереди создают одно задание для нескольких ресурсов - PullRequest
0 голосов
/ 05 августа 2020

У меня есть простое действие в Laravel Nova, которое обновляет складские запасы через вызов API. Я хочу иметь возможность ставить это в очередь как отдельные задания для каждого продукта, для которого требуется обновление для смещения вызовов API.

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

Таким образом, когда очередь обрабатывается, вместо того, чтобы ставить в очередь каждый продукт для отдельного обновления, выполняется одно задание, которое циклически перебирает все выбранные продукты и производит несколько запросов API в быстрой последовательности, что не является моим желаемым результатом.

Есть ли способ для действия создать задание для каждого ресурса, для которого выполняется действие?

Класс действия

class UpdateInventory extends Action implements ShouldQueue
{
    use InteractsWithQueue, Queueable, SerializesModels;

    public function __construct()
    {
        $this->connection = config('queue.default');
        $this->queue = 'inventory_update';
    }

    /**
     * Perform the action on the given models.
     */
    public function handle(ActionFields $fields, Collection $products)
    {
        foreach ($products as $product) {
            try {
                $inventoryService = resolve(InventoryService::class);
                $inventoryService->updateProductInventory($product); // <- API calls within
                $this->markAsFinished($product);
            } catch (\Exception $e) {
                $this->markAsFailed($product, $e);
            }
        }

        return Action::message("Inventory update started");
    }
}
...