laravel队列基础实例

从零开始摸索,走的是错误的顺序,应该是先进行第4、5步

1.创建继承自shouldqueue的job
[root@bogon Education]# php artisan make:job Myqueue
Job created successfully.

 

2.编写分发执行函数

app\Jobs\Myqueue.php中hanle函数就是队列中执行的函数,Myquue本身还是一个class,有自己的构造函数
use Log;
    public function handle()
    {
        Log::info("handle before sleep");
        sleep(5);
        Log::info("handle sleep done");
    }

3.编写执行分发函数的控制器

routes\api.php
加上Route::post('/test2/{name?}', 'TestController@testqueue');

app\Http\Controllers\TestController.php中实现testqueue函数
use Log;
    public function testqueue(){
        echo "test queue begin";
        Log::info("test queue begin");
        $this->dispatch(new Myqueue());
        Log::info("test queue dispatch done");
    }

发起test2请求后,过了5秒钟才返回,证明根本就没有发生异步的队列分发

 

4.应该提前进行的配置

vim .env
QUEUE_CONNECTION=sync
改为
QUEUE_CONNECTION=redis

再次请求,错误500
"file": "/data/HQ/SC_Educations/hq_htdocs/Education/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PredisConnector.php",
需要安装predis,跟php-redis不是一个东西
composer require predis/predis
过程有点久

 

5.应该提前开启的队列检测
php artisan queue:work

或者

php artisan queue:listen

没开启的话,会立即返回,队列任务并不执行,开启后,以前执行失败的队列任务会立即执行,执行完之后才会接收新的队列请求
 

小贴士:

发起请求接收不到,要看nginx配置监听的ip、hostname,因为本示例的nginx监听的127.0.0.1,所以只能本机测试,不能用其他机器访问

laravel的接口访问一般放在routes\api.php,默认api开头,可以在app\Providers\RouteServiceProvider.php中修改前缀

    protected function mapApiRoutes()
    {
        Route::prefix('biz_test/com')
             ->middleware('api')
             ->namespace($this->namespace)
             ->group(base_path('routes/api.php'));
    }

这样就可以用/biz_test/com/开头替代api开头了

 

laravel队列

https://laravelacademy.org/post/3252.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值