Create an account

Very important

  • To access the important data of the forums, you must be active in each forum and especially in the leaks and database leaks section, send data and after sending the data and activity, data and important content will be opened and visible for you.
  • You will only see chat messages from people who are at or below your level.
  • More than 500,000 database leaks and millions of account leaks are waiting for you, so access and view with more activity.
  • Many important data are inactive and inaccessible for you, so open them with activity. (This will be done automatically)


Thread Rating:
  • 552 Vote(s) - 3.46 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Queued Laravel jobs all fire simultaneously, and don't show up in the jobs table

#1
I am using Laravel queues for commenting on Facebook posts. Whenever I receive data from a Facebook webhook, based on the received details I comment on the post. To handle 100 responses at once from Facebook webhooks, I am using Laravel queues, so that it can execute one by one.
I used the step by step process as mentioned in [Why Laravel Queues Are Awesome](

[To see links please register here]

)

public function webhooks(Request $request)
{
$data = file_get_contents('php://input');
Log::info("Request Cycle with Queues Begins");
$job = (new webhookQueue($data)->delay(10);
$this->dispatch($job);
Log::info("Request Cycle with Queues Ends");
}

and this is my job class structure

```
class webhookQueue extends Job implements ShouldQueue
{
use InteractsWithQueue, SerializesModels;

private $data;

public function __construct($data)
{
$this->data = $data;
}

public function handle()
{
//handling the data here
}
}
```

I am hitting the `webhooks()` function continuously, and all the jobs are working simultaneously but not in the queue. None of the jobs are being stored in the jobs table. I have given a delay but it is also not working.

And this is my laravel.log:

[2017-02-08 14:18:42] local.INFO: Request Cycle with Queues Begins
[2017-02-08 14:18:44] local.INFO: Request Cycle with Queues Begins
[2017-02-08 14:18:47] local.INFO: Request Cycle with Queues Begins
[2017-02-08 14:18:47] local.INFO: Request Cycle with Queues Begins
[2017-02-08 14:18:47] local.INFO: Request Cycle with Queues Begins
[2017-02-08 14:18:47] local.INFO: Request Cycle with Queues Begins
[2017-02-08 14:18:48] local.INFO: Request Cycle with Queues Begins
[2017-02-08 14:18:48] local.INFO: Request Cycle with Queues Begins
[2017-02-08 14:18:48] local.INFO: Request Cycle with Queues Begins
[2017-02-08 14:18:48] local.INFO: Request Cycle with Queues Begins
[2017-02-08 14:18:48] local.INFO: Request Cycle with Queues Begins
[2017-02-08 14:18:48] local.INFO: Request Cycle with Queues Begins
[2017-02-08 14:18:55] local.INFO: Request Cycle with Queues Ends
[2017-02-08 14:18:55] local.INFO: Request Cycle with Queues Ends
[2017-02-08 14:18:55] local.INFO: Request Cycle with Queues Ends
[2017-02-08 14:18:59] local.INFO: Request Cycle with Queues Ends
[2017-02-08 14:19:00] local.INFO: Request Cycle with Queues Ends
[2017-02-08 14:19:00] local.INFO: Request Cycle with Queues Ends
[2017-02-08 14:19:00] local.INFO: Request Cycle with Queues Ends
[2017-02-08 14:19:01] local.INFO: Request Cycle with Queues Ends
[2017-02-08 14:19:01] local.INFO: Request Cycle with Queues Ends
[2017-02-08 14:19:01] local.INFO: Request Cycle with Queues Ends
[2017-02-08 14:19:01] local.INFO: Request Cycle with Queues Ends
[2017-02-08 14:19:01] local.INFO: Request Cycle with Queues Ends
Reply

#2
I am seeing that you already have Queue table.

Try running `php artisan queue:listen --tries=3` or `php artisan queue:work` etc.

Queue work is for executing only one Job per command. So if there are 20 jobs in the table you might have to run queue work 20 times. That's why you can run `queue:listen` command. But it eats up a lot of CPU.

In the server, you might want to run your queue listen with max 3 tries in the background.
SSH to your server in the Terminal / Command Prompt. Then `CD` to your project directory where the artisan file lives. Run this command:

`nohup php artisan queue:listen --tries=3 > /dev/null 2>&1 &`

In this case jobs will automatically be processed in the background. You just have to dispatch the job. And I would recommend using failed-jobs table. If you are using background queue listner.

Hope this helps.
Reply

#3
Update for Laravel 5.7:

In `.env`, set `QUEUE_CONNECTION=database` so that dispatched jobs go to the database driver.

Then:

```
# Creates a migration for the database table holding the jobs
php artisan queue:table

# Executes the migration
php artisan migrate

# Kicks off the process that executes jobs when they are dispatched
php artisan queue:work
```
Reply

#4
The accepted answer was a problem for me, but I also wound up on this question for 2 other similar problems which I solved, and maybe they will help other people that wind up here.

**Other problem 1**: job creation (constructor) works, but job handler does not fire - **ever**.

- the __ever__ is key here because, typically, if none of them ever fire, then it could be because your job code is modified and your queue should be restarted.

**Other problem 2**: job creation (constructor) works, but job handler does not fire - **sometimes**.

- when __sometimes__ is true for you, then it may be that your jobs that are not firing are because they are happening while in a transaction, like a `DB::beginTransaction`.

Assuming I _want_ the job to fire even during a transaction, I can do this:

/**
* Create a new job instance.
*
* @return void
*/
public function __construct($errorInfo)
{
$this->errorInfo = $errorInfo;

// Queues won't run the handlers during transactions
// so, detect the level, and if it is not 0, rollback to force job handling
if (\DB::transactionLevel() != 0) {
\DB::rollBack();
}
}

**BUT DON'T DO THIS** unless you _want_ to fire your job and force rollback. My situation is unique in that my job sends emails on FATAL errors, so I want it to fire because I have an error breaking the process anyway (rollback going to happen and is unplanned due to uncaught error).

Here's a situation when you wouldn't want to do this:

- your job sends an email to a user when payment is successful
- your payment could be successful, could not be
- depending on successful payment, you rollback or commit

You should structure your dispatch to happen AFTER you rollback or commit.
I did not have that luxury for my job because it happens when I cannot predict (a FATAL error). But if you have control over it, like knowing your payment is successful, dispatch after you have committed, or exited all levels of transactions!

I am not sure of the behavior of triggering a job while in the transaction, and _then_ rolling back or committing. It could be worked around if it didn't work properly by adding a delay, but that seems unreliable (guessing at how long to wait) unless it was a significant delay.
Reply

#5
For future readers of that questions , if queues were working before but no longer , just try to delete everything from the jobs table in the database , that worked for me .
Reply

#6

Make sure your app is not in maintenance mode... I had mine in maintenance, but allowing my local ip address... I couldn't figure out why it was not running. I had to finally go debugging the WorkCommand to find out...

./artisan up;
Reply

#7
Don't make the same mistake as me,

I was running `php artisan queue:work` in the wrong directory.

Only wasted 30 minutes, could have been longer.
Reply

#8
In my case, i use custom queue name for group my jobs.

````
ProcessCourseInteractions::dispatch($courseProcessing)->onQueue('course_interactions');
````

That queue is not executed by:

php artisan queue:work

and

php artisan queue:listen


i need specify queue name (Valid for work and listen):

````
php artisan queue:work --queue=course_interactions
````
Reply

#9
Simply set `QUEUE_CONNECTION=database` in .env file
Reply

#10
All thing are set-up and still not work then make sure added schedule on crontab -e
`* * * * * cd /var/www/html/<project_name> && php artisan schedule:run >> /dev/null 2>&1`
Reply



Forum Jump:


Users browsing this thread:
1 Guest(s)

©0Day  2016 - 2023 | All Rights Reserved.  Made with    for the community. Connected through