ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
#### 引入包 ~~~ composer require "predis/predis:~1.0" ~~~ #### 配置队列驱动 这些驱动包括:数据库,Beanstalkd,Amazon SQS,Redis,和一个同步(本地使用)的驱动。还有一个名为 null 的驱动表明不使用队列任务。 ~~~ QUEUE_DRIVER=redis ~~~ #### 使用Database作为驱动 使用database作为驱动的时候要创建jobs表,通过以下命令 ~~~ php artisan queue:table ~~~ #### 创建失败任务表 有时候队列中的任务会失败。Laravel 内置了一个方便的方式来指定任务重试的最大次数。当任务超出这个重试次数后,它就会被插入到 failed_jobs 数据表里面。我们可以使用 queue:failed-table 命令来创建 failed_jobs 表的迁移文件: ~~~ php artisan queue:failed-table ~~~ 生成迁移文件 ~~~ php artisan migrate ~~~ #### 创建任务类 ~~~ php artisan make:job TestJob ~~~ 会在app/Jobs目录下生成任务类.该类实现了 Illuminate\Contracts\Queue\ShouldQueue 接口,该接口表明 Laravel 应该将该任务添加到后台的任务队列中,而不是同步执行。 引入了 SerializesModels trait,Eloquent 模型会被优雅的序列化和反序列化。队列任务构造器中接收了 Eloquent 模型,将会只序列化模型的 ID。这样子在任务执行时,队列系统会从数据库中自动的根据 ID 检索出模型实例。这样可以避免序列化完整的模型可能在队列中出现的问题。 handle 方法会在队列任务执行时被调用。值得注意的是,我们可以在任务的 handle 方法中可以使用类型提示来进行依赖的注入。Laravel 的服务容器会自动的将这些依赖注入进去,与控制器方法类似。 还有一点需要注意,我们将会在模型监控器中分发任务,任务中要避免使用 Eloquent 模型接口调用,如:create(), update(), save() 等操作。否则会陷入调用死循环 —— 模型监控器分发任务,任务触发模型监控器,模型监控器再次分发任务,任务再次触发模型监控器.... 死循环。在这种情况下,使用 DB 类直接对数据库进行操作即可。 #### 任务分发 ~~~ dispatch(new TestJob()) //这里是进行任务分发,只分发任务,并不立刻执行 ~~~ #### 测试 ~~~ php artisan queue:work //此命令启动消息队列系统,并进行监听 ~~~ #### 注意 在使用database作为驱动的时候,如果任务分发了,没有执行成功,laravel会不断的重试任务.需要把任务清空.