laravel 5.5 消息列队使用

本文介绍如何在Laravel项目中实现队列功能,包括数据库配置、队列任务创建及监听等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

假设创建一个项目
queue-demo [自行创建]

配置数据库

项目根目录拷贝cp .env.example .env

vim .env 编辑

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=数据库名
DB_USERNAME=root
DB_PASSWORD=root

1.创建数据库
1.1 php artisan queue:table

创建列队失败表

1.2 php artisan queue:failed-table

2.迁移数(据迁移时由于数据库版本问题报错,标记 #9527 )

php artisan migrate

#数据库会多出一个jobs表 [惊不惊喜,刺不刺激!!!]

3.创建job列队任务控制器

php artisan make:job SendEmail

<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Log;

class SendEmail implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $email;
    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct($email)
    {
        $this->email = $email;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        /*Mail::raw("队列测试",function(&$meassage){
            $meassage->to($this->email);
        });*/
        
        // 模拟测试
        Log::info("已发送邮件 - ". $this->email);
    }
}

4.创建业务控制器

php artisan make:controller IndexController

/项目/App/Http/Controllers/IndexController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;
use App\Http\Controllers\Controller;
use App\Jobs\SendEmail;

class IndexController extends Controller
{

    /**
     * [queue description]
     * @return [type] [description]
     */
    public function queue() {
    	dispatch(new SendEmail('1208713818@qq.com'));

    }

}

6.配置 .env 文件

vim .env

...

QUEUE_DRIVER=database //修改成database

...

7.设置访问路由

..../../ routes/web.php

...

Route::get('queue', 'IndexController@queue');

...

8.浏览器访问[本地自行配置域名解析] http://www.demo.queue.cc/queue

检查数据库会多出两条数据[我刷新了两次,测试执行。。。。]

9.启动queue监听指令

php artisan queue:listen

我们还需要在命令行中运行Artisan命令执行队列中的任务。Laravel为此提供了三种Artisan命令:

1)queue:work 默认只执行一次队列请求, 当请求执行完成后就终止

2)queue:listen 监听队列请求,只要运行着,就能一直接受请求,除非手动终止;

3)queue:work --daemon 同listen一样, 只要运行着,就能一直接受请求,不一样的地方是在这个运行模式下,当新的请求到来的时候,不重新加载整个框架,而是直接 fire 动作。能看出来, queue:work --daemon 是最高级的,一般推荐使用这个来处理队列监听

注:使用 queue:work --daemon ,当更新代码的时候,需要停止,然后重新启动,这样才能把修改的代码应用上。

php artisan queue:work --daemon

命令行显示:

gongsidiannaodeMacBook-Pro:laravel-demo admin$ php artisan queue:listen

[2018-09-18 07:18:11][1] Processing: App\Jobs\SendEmail

[2018-09-18 07:18:11][1] Processed:  App\Jobs\SendEmail

[2018-09-18 07:18:11][2] Processing: App\Jobs\SendEmail

[2018-09-18 07:18:11][2] Processed:  App\Jobs\SendEmail

查看执行日志

[2018-09-18 07:18:11] local.INFO: 已发送邮件 - 1208713818@qq.com  
[2018-09-18 07:18:11] local.INFO: 已发送邮件 - 1208713818@qq.com  
 

队列执行成功完成后,数据库里的记录自动删除。

辅助操作 #9527

/项目/App/Providers/AppServiceProvider.php

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Schema; //添加引用

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        //
        Schema::defaultStringLength(191); //添加此行
    }

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值