Download the PHP package vxm/laravel-async without Composer
On this page you can find all versions of the php package vxm/laravel-async. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download vxm/laravel-async
More information about vxm/laravel-async
Files in vxm/laravel-async
Package laravel-async
Short Description Provide an easy way to run code asynchronously for Laravel
License MIT
Homepage https://github.com/vuongxuongminh/laravel-async
Informations about the package laravel-async
Laravel Async
About it
A package provide an easy way to run code asynchronous and parallel base on Spatie Async wrapper for Laravel application.
Installation
Require Laravel Async using Composer:
The package will automatically register itself.
You can publish the config-file (optional) with:
This is the contents of the published config file:
Usage
Run async code
After install, now you can try run async code via Async
facade:
An async job can be callable class, anonymous function or Laravel callback:
You can run multiple job one time and waiting until all done.
Event listeners
When creating asynchronous processes, you can add the following event hooks:
Working with complex job
When working with complex job you may want to setup more before it run (ex: job depend on Eloquent model). This package
provide you an Artisan command make:async-job
to generate a job template.
By default, all of the async jobs for your application are stored in the app/AsyncJobs
directory.
If the app/AsyncJobs
directory doesn't exist, it will be created. You may generate a new async job using the Artisan
CLI:
After created it, you need to prepare your job structure, example:
In this example, note that we were able to pass an Eloquent model directly into the async job's constructor.
Because of the SerializesModels
trait that the job is using, Eloquent models will be gracefully serialized and
unserialized when the job is processing.
If your async job accepts an Eloquent model in its constructor, only the identifier for the model will be serialized
onto the queue.
When the job is actually handled, the system will automatically re-retrieve the full model instance from the database.
It's all totally transparent to your application and prevents issues that can arise from serializing full Eloquent model
instances.
The handle
method is called when the job is processed in async process. Note that we are able to type-hint
dependencies on the handle method of the job.
The Laravel service container automatically injects these dependencies.
If you would like to take total control over how the container injects dependencies into the handle method, you may use
the container's bindMethod
method. The bindMethod
method accepts a callback which receives the job and the
container. Within the callback, you are free to invoke the handle method however you wish.
Typically, you should call this method from a service provider:
Now run it asynchronously:
Compare with queue
You can feel this package look like queue and thing why not using queue?
Queue is a good choice for common async jobs. This package using in cases end-user need to get response in single request but it's a heavy things need to using several processes for calculation or IO heavy operations. And it no need to run a queue listener.