Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
156 views
in Technique[技术] by (71.8m points)

How to Chain Bus::chain() in laravel

I have three Laravel Parent jobs name

        AutoPOChargeCalculation::dispatch($invoice_id, $user_id, $notify)->onQueue('invoice');
        AutoSOChargeCalculation::dispatch($invoice_id, $user_id, $notify)->onQueue('invoice');
        AutoSPChargeCalculation::dispatch($invoice_id, $user_id, $notify)->onQueue('invoice');

inside Each of them calling child jobs with for loop


 foreach ($objects as  $object) {

            $jobs[] = new CalculateSingleSaleOrderCharge($model, $object, $user_id, $notify, $i, $total_objects);
         $i ++;
        }
        Bus::chain($jobs)->onQueue('invoice')->dispatch();
    }
 foreach ($objects as  $object) {

            $jobs[] = new CalculateSinglePurchaseOrderCharge($model, $object, $user_id, $notify, $i, $total_objects);
         $i ++;
        }
        Bus::chain($jobs)->onQueue('invoice')->dispatch();
    }

 foreach ($objects as  $object) {

            $jobs[] = new CalculateSingleStoragePeriodCharge($model, $object, $user_id, $notify, $i, $total_objects);
         $i ++;
        }
        Bus::chain($jobs)->onQueue('invoice')->dispatch();
    }

Now I am thinking to removed parent jobs and Chained the all child jobs bus


 Bus::chain($jobs)->onQueue('invoice')->dispatch()->withChain(
 Bus::chain($jobs)->onQueue('invoice')->dispatch())->withChain(
 Bus::chain($jobs)->onQueue('invoice')->dispatch());


Is that Possible?

question from:https://stackoverflow.com/questions/65882261/how-to-chain-buschain-in-laravel

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

With new Laravel 8 update you can now send a batch of jobs to the queue, in addition to that, you can also batch chained jobs.

use AppJobsReleasePodcast;
use AppJobsSendPodcastReleaseNotification;
use IlluminateBusBatch;
use IlluminateSupportFacadesBus;

Bus::batch([
    [
        new ReleasePodcast(1),
        new SendPodcastReleaseNotification(1),
    ],
    [
        new ReleasePodcast(2),
        new SendPodcastReleaseNotification(2),
    ],
])->then(function (Batch $batch) {
    // ...
})->dispatch();

Check it out here for the documentation. Chains Within Batches - Laravel 8


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...