Laravel 队列 使用集群版阿里云redis,用到了 任务批处理无法执行,普通的队列可以执行

Laravel 任务批处理无法在阿里云redis 集群版使用

  • 普通的队列可以执行

    TestJob::dispatch()->onQueue("{test}");
  • 使用了批处理无法执行

    Bus::batch(
      [
          new TestJob()
      ]
    )->onQueue('{test}')->dispatch();

laravel 队列 会将内容 rpush 到名为 {prefix}_queues:{test} 类型为 list ,但是使用了任务批处理并没有将任务放入队列

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

阿里云Redis集群版无法使用Laravel的Redis队列。推荐使用MNS。

原因: laravel的redis队列使用了 LUA脚本。

阿里云Redis集群版LUA脚本限制参看: help.aliyun.com/document_detail/92...

1年前 评论
讨论数量: 3
  1. 手动指定下连接方式
Bus::batch(
  [
      new TestJob()
  ]
)->onConnection('redis')->onQueue('{test}')->dispatch();
  1. 检查批次任务表有没有创建
    php artisan queue:batches-table
    php artisan migrate
  2. 检查任务类是否包含了 Batchabletrait
    use Illuminate\Bus\Batchable;
    class TestJob  implements ShouldQueue {
     use Batchable, Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
    }
  3. 还是不行的话,就用 Redis 的 monitor 命令监控下,看看批次调用的时候队列的写入情况(排查下是否是队列名称和写入队列的问题),如果没有入队的话,再从程序上打打断点看看哪一步了出问题了吧。
1年前 评论
Dora__ (楼主) 1年前

阿里云Redis集群版无法使用Laravel的Redis队列。推荐使用MNS。

原因: laravel的redis队列使用了 LUA脚本。

阿里云Redis集群版LUA脚本限制参看: help.aliyun.com/document_detail/92...

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!