sync驱动是最轻量、零依赖的本地调试方案,任务同步执行、无需worker,适合逻辑验证和断点调试,但不支持延迟、重试等异步特性,上线前须切回redis并清缓存。

用 Laragon 配 Laravel 队列,选 sync 驱动 是最轻量、零依赖的本地调试方案——它不启动后台进程,不连 Redis 或数据库,任务一发就执行,适合验证逻辑、断点调试和快速迭代。
确认 Laravel 已识别 sync 驱动
Laravel 默认就是 sync 驱动,但要确保没被意外覆盖:
- 检查 .env 文件,确认有这一行:
QUEUE_CONNECTION=sync(Laravel 5.7+ 只认这个变量) - 删掉 config:cache 缓存(开发环境别留它):
php artisan config:clear - 进
php artisan tinker,运行config('queue.default'),返回值必须是"sync"
直接分发任务,无需启动 worker
sync 驱动下,dispatch() 调用即同步执行,不进队列也不排队:
- 写一个任务类:
php artisan make:job SendWelcomeEmail - 在控制器里调用:
SendWelcomeEmail::dispatch($user); - 任务里的
handle()方法会立刻运行,可加Log::info()或断点验证 - 不用跑
php artisan queue:work,也无需担心进程卡住或重复消费
测试多队列路由时仍可用 sync
即使你后续要用 redis/database 多队列,现在也能用 sync 模拟队列名和连接路由行为:
- 分发到指定队列:
SendWelcomeEmail::dispatch()->onQueue('emails'); - 分发到指定连接(需先在 config/queue.php 中定义多个 sync 连接):
->onConnection('sync_emails') - 配合
Queue::fake()和assertPushedOn()做单元测试,验证任务是否进了正确的队列名
注意:这不是“真队列”,只是调试开关
sync 驱动本质是绕过队列系统,所以它:
- 不支持延迟任务(
delay()无效)、失败重试、超时控制等异步特性 - 不能用于压测吞吐量,也不能替代生产环境的 redis/database 驱动
- 上线前务必改回
QUEUE_CONNECTION=redis并清缓存、启 worker











