Laravel 5.7 jobs queue not running async

Stefan Bogdanescu

Founder & Senior Architect · 2026-06-29

Laravel Company

Laravel Jobs Queue Not Running Async: Why Your Jobs Are Blocking Execution

As a senior developer working with Laravel, managing background jobs efficiently is crucial for building responsive applications. When you dispatch a job, the expectation is that the main application thread should remain free while the heavy lifting happens in the background—asynchronously. If your jobs are blocking your application flow instead of running in parallel, it usually points to a misconfiguration in how Laravel is handling the queue connection.

This post will diagnose why your Laravel 5.7 setup might be behaving synchronously and provide the definitive steps to configure a truly asynchronous job processing system.

Diagnosing the Problem: The Role of sync

The core issue lies in your environment configuration, specifically the QUEUE_CONNECTION. Based on the snippet you provided:

ini
QUEUE_CONNECTION=sync

When you set the queue connection to sync, Laravel bypasses the entire queuing mechanism. Instead of pushing the job onto an external broker (like Redis or a database table) for later processing by a separate worker, the job is executed immediately within the same request that calls dispatch(). This results in blocking behavior, which is exactly what you are experiencing—the job runs synchronously, freezing your web request until it completes its database operations.

To achieve true asynchronous processing, you must use a driver that separates the dispatching of the job from its execution.

The Solution: Implementing Asynchronous Queuing

For jobs to run asynchronously, two components are essential:

  1. A Queue Driver: A system (like Redis, Beanstalkd, or Database) to hold the queued jobs.
  2. A Queue Worker: A separate, long-running PHP process that constantly monitors the queue and executes the waiting jobs.

Since you are using Laravel 5.7, while the core job dispatching mechanism remains the same, we need to change the connection settings to utilize a proper external queue system.

Step 1: Configuring the Queue Connection

You should switch from sync to a more robust driver. For many applications, the database driver (which you have already set up) or Redis are excellent choices.

In your .env file, change the connection setting:

ini
BROADCAST_DRIVER=log
CACHE_DRIVER=file
QUEUE_CONNECTION=database  # Or 'redis', depending on your infrastructure
SESSION_DRIVER=file
SESSION_LIFETIME=120

Step 2: Ensuring the Database Setup is Correct

You have correctly configured the database connection in config/queue.php:

php
'database' => [
    'driver' => 'database',
    'table' => 'jobs',
    'queue' => 'default',
    'retry_after' => 90,
],

When using the `