zoukankan      html  css  js  c++  java
  • Laravel 队列的简单使用例子

    场景:

    在一个a系统中注册一个用户时,发送请求到b系统中也注册一个相同信息的账号,考虑到网络有可能错误的原因,所以使用队列去处理

    1.修改根目录 .env 文件的QUEUE_CONNECTION字段配置 为database

    Laravel可配置多种队列驱动,包括 "sync", "database", "beanstalkd", "sqs", "redis", "null"(具体参见app/config/queue.php)
    其中sync为同步,database为使用数据库,后面三种为第三方队列服务,最后一种为不使用队列。
    通过在 .env 中的 QUEUE_CONNECTION 选项,来决定选择何种驱动。
    如 QUEUE_CONNECTION=database 即为选择数据库驱动队列。


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

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

    php artisan queue:table
    

      

    php artisan migrate
    

      生产一张队列表

    3.生成任务类

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

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

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

     
    php artisan make:job SynUser
    

      

    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 test()
    {
        SynUser::dispatch('发送请求到b系统生成账号');
    }
    

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

    6.执行命令开启队列

    php artisan queue:work
    

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

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

  • 相关阅读:
    阿诺尔德给5至15岁孩子出的数学题
    上手机器学习,从搞懂这十大经典算法开始
    海报模板
    测度论--长度是怎样炼成的[zz]
    柯西不是你
    搭建Web部署环境
    搭建jdk环境
    Win10远程桌面 出现 身份验证错误,要求的函数不受支持,这可能是由于CredSSP加密Oracle修正 解决方法
    Web开发技术选型之Java与PHP
    从java到web前端再到php,一路走来的小总结
  • 原文地址:https://www.cnblogs.com/shifu204/p/11730558.html
Copyright © 2011-2022 走看看