laravel mysql 队列_Laravel 队列使用

Laravel 队列使用

1.修改根目录

.env 文件的 **QUEUE_CONNECTION **字段配置为 database

Laravel可配置多种队列驱动,包括 "sync", "database", "beanstalkd", "sqs", "redis", "null"(具体参见app/config/queue.php)

其中sync为同步,database为使用数据库,后面三种为第三方队列服务,最后一种为不使用队列。

5f600ba082f3d34a91af047e3a116aaf.png

该位置具体是什么请查看app/queue

5f37cc874c16243f57cb691f641adc1f.png

2.创建数据库队列表(database方式)

为了使用 database 队列驱动,你需要一张数据表来存储任务。php artisan queue:table

生产一张队列表php artisan migrate

mysql版本5.7.7以下可能会报如下错误

4b752358892af45e7b7c43252e67bad7.png

解决方案

打开app/Providers/AppServiceProvider文件,在boot方法中加入如下代码,删除数据库中已经生成的迁移数据表,再次运行就可以成功。

一定要删除已经生成的job数据表,否者汇报如下错误

bfc8daf27ffea29e65209c7786688374.png\Schema::defaultStringLength(191); //add fixed sql

数据库最终效果

395bbd69f1c7d387523dc2c34257b5f3.png

3.生成任务类

在你的应用程序中,队列的任务类都默认放在 app/Jobs 目录下。

如果这个目录不存在,那当你运行 make:job Artisan 命令时目录就会被自动创建。

你可以用以下的 Artisan 命令来生成一个新的队列任务:php artisan make:job SetLog

d255a42060d6d6c2e128d16bd13fe0d4.png

4.在队列类里面的handle方法中写上业务逻辑(比如发送网络请求,发送邮件等等,这里简单写个日志代替)protected $message;

/**

* Create a new job instance.

*

* @return void

*/

public function __construct($message)

{

$this->message = $message;

}

/**

* Execute the job.

*

* @return void

*/

public function handle()

{

\Log::info($this->message);

}

5.在控制器中加入一个测试方法,直接调用队列类的 dispatch方法,类似生产了一个任务public function index(Request $request){

SetLog::dispatch(date('Y-m-d H:i:s') . "进入了系统");

}

这时,由于队列还没开启,数据库的队列表中会有一个任务,等待队列启动后执行

d749274d0656fd45eb21fd6634b35159.png

6.执行命令开启队列php artisan queue:work

这时,队列表中的任务执行后就会自动删除了,类似消费了任务

1f8964e504231cdf5dda0c294d34754e.png

7208ab37ec8d95777e9e2f3242910266.png

c2e9179c3bd83aa579547c816c16bce4.png

以上是抛转引玉的一个简单例子,具体细节可以查看laravel的队列文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值