iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more
Laravel Horizon’s balancing mode determines whether workers follow queue workload, split capacity evenly, or process queues in configured order. Choose auto for workload-responsive allocation, simple for a fixed even split, or balance => false when listed queue order should establish priority. Crucially, auto does not make the first queue in the list a priority queue.
Why can workers be idle while another queue is backed up?
It depends on how the supervisor allocates its worker processes. With simple, Horizon divides a fixed total evenly among the configured queues, so workers assigned to a quiet queue may sit idle while another queue has pending jobs. With auto, Horizon adjusts the number of processes per queue according to workload. With balance => false, workers process queues in listed order, which can prioritize earlier queues while making later ones wait.
Laravel’s Horizon documentation illustrates auto with a queue containing 1,000 pending jobs receiving more workers than an empty queue, and simple with 10 processes split five apiece across two queues. These are configuration examples, not measured performance guarantees. Laravel Horizon documentation
The Tool Desk
Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →How do Horizon’s three balancing modes differ?
| Mode | How capacity is allocated | Does queue order set priority? | Best fit |
|---|---|---|---|
auto |
Worker processes shift among queues in response to workload, within configured limits. | No. Laravel states that queue order does not affect worker assignment. | Workloads that vary over time and benefit from responsive allocation. |
simple |
A fixed total is divided evenly among configured queues. | No; the defining behavior is an even split. | When predictable, equal per-queue capacity matters more than shifting workers to current demand. |
false |
Queues are processed in their listed order, similar to the default queue worker behavior. | Yes. Earlier queues are handled before later ones. | When you deliberately want queue order to express priority and accept the possibility that later queues wait. |
The distinction between auto and false matters when a queue is starved. Putting high before low in an auto supervisor does not guarantee that high gets workers first. Under false, order does affect processing, but a continuously backlogged earlier queue can hold up later queues. Pick that tradeoff deliberately rather than treating queue order as a universal priority mechanism.
#1 Best Overall
How should you configure auto balancing?
Auto balancing depends on several settings that control minimum capacity, overall capacity, allocation logic, and how quickly capacity can change. Their effects are linked: a low cap can constrain scaling, while a slow balancing cadence can delay a response to a changing backlog.
minProcessessets the minimum number of processes per queue.maxProcessescaps the total processes across queues.autoScalingStrategychooses how Horizon estimates need: by time to clear, job count, or logarithm of job count. The logarithmic option reduces the disproportionate allocation a much larger queue might otherwise receive.balanceMaxShiftlimits how many processes can change during a balancing interval.balanceCooldownsets the interval between balancing decisions.
Laravel documents an example that shifts a maximum of one process every three seconds. That is an illustrative configuration, not a universal recommendation. Set the minimum, total cap, strategy, shift, and interval against your own queue wait time, job throughput, job duration, and available resources; the documentation does not prescribe values that suit every workload. Laravel Horizon documentation
How can you stop one queue from being starved?
Use a separate supervisor for independent capacity
If two queues need distinct capacity guarantees, place them under separate supervisors and assign each its own process limits. Laravel’s documentation uses separate supervisors as an approach to giving queues different fixed totals. This makes capacity easier to control independently than relying on one shared allocation pool.
Constrain resource-intensive jobs
For work that can consume substantial CPU, consider a dedicated queue with a limited maxProcesses. A cap helps prevent that workload from using excessive CPU and overloading the system. The appropriate limit depends on the deployment’s resources and job behavior.
Rank #3
Use explicit priority only when waiting is acceptable
If earlier queues must be processed ahead of later ones, balance => false makes queue order meaningful. The cost is that sustained work in an earlier queue can delay later queues. If those later queues also need dependable service, isolate them with their own supervisor and capacity rather than assuming auto balancing observes list order.
What should you check before allowing workers to scale down?
Scale-down interacts with jobs already running. Laravel warns that under auto, Horizon may treat in-progress workers as hanging and force-kill them after the Horizon timeout during scale-down. Check the timeout relationship before changing balancing behavior:
Rank #4
- Set Horizon’s timeout longer than the job-level timeout.
- Keep Horizon’s timeout a few seconds shorter than the queue connection’s
retry_after. - Choose values based on actual job durations and retry behavior. A mismatch can terminate work mid-execution or cause a job to be processed twice.
These relationships are safety constraints, not a substitute for measuring how long your jobs really take. Refer to the Horizon timeout guidance when setting them.
When is a managed queue worth considering?
If the operational issue is keeping workers warm without managing worker processes directly, Laravel’s managed-queues announcement describes setting a minimum number of workers on a queue so a worker remains ready and avoids a cold start. That is a deployment option, not another Horizon balancing mode. The announcement does not establish partner or affiliate terms. Laravel’s managed-queues announcement
Quick Recap
Best Value
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

