I’m trying to implement Queuing, but the result is not async
And I have Applied the following
config/queue.php
'default' => env('QUEUE_DRIVER', 'database'),
'connections' => [
'sync' => [
'driver' => 'sync',
],
'database' => [
'driver' => 'database',
'table' => 'jobs',
'queue' => 'default',
'expire' => 60,
],
]
and then applied the following commands
php artisan queue:table
php artisan migrate
and then run
php artisan queue:listen
and here is the functionality
SomethingController.php
$model1 = new \App\Model1;
public function store(){
Log::debug('before dispatch');
$this->dispatch(new SendGiftCommand($model1));
Log::debug('before dispatch');
return true;
}
SendGiftCommand.php
{
Log::debug('handle');
SendGift::SendGiftAgedBased($this->model1);
sleep(4);
Log::debug('SendGiftCommand end');
}
SendGift.php
public static function SendGiftAgedBased(Model1 $model1){
Log::debug('inside SendGiftAgedBased');
}
even the process has worked but its not async, and it waits for the command to finish to return the response in the controller
And I git the Logs in this order
[2015-12-09 16:28:42] local.DEBUG: before dispatch
[2015-12-09 16:28:42] local.DEBUG: handle
[2015-12-09 16:28:42] local.DEBUG: inside SendGiftAgedBased
[2015-12-09 16:28:46] local.DEBUG: SendGiftCommand end
[2015-12-09 16:28:46] local.DEBUG: after dispatch
should it be working on Localhost ?
I had the same problem with jobs not being asynchronous and this worked for me :
- Edit .env and change the QUEUE_DRIVER setting from sync to database (editing config/queue.php wasn’t enough)
- Restart your processes
Answer:
In order for the job to be queued, the job class needs to implement Illuminate\Contracts\Queue\ShouldQueue interface – make sure it’s true for your class.
You can find more info on queuing jobs here: http://laravel.com/docs/5.1/queues#writing-job-classes
Answer:
Use this command to create the job:
php artisan make:job SendGiftCommand --queued
Refer this link for defining the job:
https://laravel.com/docs/5.1/queues#writing-job-classes
Then pass declare the job and dispatch the job in this manner:
$processGift = new sendGiftCommand($model1);
$this->dispatch($processGift);
Also refer Supervisor Configuration on the above mentioned link further for continuously listening to the queue or automatically restarting the command queue:listen if they fail.
Tags: laravel, php, phplaravel