laravel+redis实现消息队列
首先说明一下使用队列的原因:
自己闲来无事想学习一下laravel框架,同时在网上发现了一个第三方音乐网站,打开f12发现其接口返回的有音乐信息,就想着写个程序把该网站上某个歌手的歌下载下来试试,当时没考虑使用队列,程序写完后在网站上访问发现太慢了,于是想到使用消息队列,先访问接口把访问该歌手的所有歌曲信息放到队列中,让程序在后台队列执行下载歌曲的操作,这样在前台网站上只需要访问接口并放到队列即可。此后的下载操作放在服务器即可。
首先安装redis驱动,以及predis(省略)
在配置文件中配置默认队列驱动为Redis,队列配置文件是config/queue.php
:
该配置文件第一个配置项default用于指定默认的队列驱动,这里我们将其值改为redis。
然后打开laravel根目录下的. env
文件:
修改QUEUE_CONNECTION=redis
添加QUEUE_DRIVER=redis
接下来创建任务类在laravel跟目录下输入php artisan make:job Test
运行成功后会在app/Jobs目录下生成一个Test.php,我们修改其内容如下:
laravel根目录下创建一个controller文件:php artisan make:controller CeController
在controller里写一个正常的访问请求
设定路由:
route(/routes/web.php)
Route::get(‘getMusic’,‘[email protected]’)->name(‘getMusic’);
开启监听队列laravel根目录下输入php artisan queue:work redis --queue=test --sleep=3 --tries=3
然后在网址访问:
www.xxxx.com/getMusic
发现报错 class App\Jobs\Test not found
此时参照http://blog.onlywan.cc/15004888347082.html
尝试执行composer dump-autoload -o
发现再访问www.xxxx.com/getMusic成功:
就可以看到执行了