前阵子有短信群发的需求,云片的群发只支持一千条以下,再多就不行了,所以想到了使用laravel队列,但是之前从来没有用过,所以去看了下文档,知道了怎么用,但是原理还是不是很懂,大概使用步骤再此记录下吧

下面是在lumen中的使用方法

1.将队列的配置文件  queue.php 以及database.php  放在config目录下,然后看一下文件里面的内容是什么意思

queue.php文件下

        'default' => env('sync', 'redis'),//这个是默认连接,在这一块我直接默认连接redis,因为要用到
        'connections'  该配置项定义了后台队列服务的特定连接,比如 database、beanstalkd、sqs、redis。

                 'redis' => [

                             'driver' => 'redis',

                             'connection' => env('QUEUE_REDIS_CONNECTION', 'default'), //default会连接到database.php文件里的redis下面的default,熟悉了队列后可以自己定义

                             'queue' => 'default',  //队列的名称,刚开始使用队列可以不用修改,熟悉以后可以自己定义

                            'retry_after' => 90,

                             'block_for' => 5,

                  ],

在使用redis的时候一定要记得在windows下装redis,并且开启,redis的端口号是6379,当时没搞明白,就因为这个端口号报错好长时间。

2.在lumen里使用redis还需要安装redis扩展,可以直接在composer.json里直接添加predis/predis ~1.0然后 composer update或者具体看文档操作。

3.生成创建任务,在lumen中不能直接使用命令行,所以在App/Jobs目录下可以直接复制一份ExampleJob.php修改名称。__construct需要把你传过来的值重构,一定记住在上面定义。handle是写业务逻辑的地方,可以通过构造方法去拿你在控制器里传过来的值。直接在handle里去输出是拿不到返回值的,可以直接打印日志来看结果。

class QueueSmsSendJob extends Job
{
    /**
     * Create a new job instance.
     *
     * @return void
     */
    public $phone;
    public $content;
    public $id;
    public $user_id;
    public function __construct($phone,$content,$id,$user_id)
    {
        $this->phone = $phone;
        $this->content = $content;
        $this->id = $id;
        $this->user_id = $user_id;
    }


    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        //调用接口发送短信
        $res = Sms::sendSms($this->phone,$this->content);
        if($res->original['err_code'] == 0){
            //发送成功  修改云片状态
            SmsLogModel::where('id',$this->id)->update(['service_code'=>$res->original['err_code']]);
            $log =  log_daily('SmsCallBcck')->info('手机号'.$this->phone.'发送成功,服务商返回状态码:'.$this->original['err_code'].'操作者:'.$this->user_id.'操作时间:'.date('Y-m-d H:i:s',time()));
        }else{
            SmsLogModel::where('id',$this->id)->update(['service_code'=>$res->original['err_code']]);
            $log =  log_daily('SmsCallBcck')->info('短信发送失败,服务商返回状态码:'.$this->original['err_code'].'操作者:'.$this->user_id.'操作时间:'.date('Y-m-d H:i:s',time()));
        }
    }

    public function failed()
    {

    }
}

handle里面可以直接逻辑,我写的这个是群发短信,通过队列,将一个一个要发送的短信加入到队列中,然后再handle里去拿我在控制器里传过来的电话号码以及要发送的内容执行去发送短信。

4.在控制器里去调用,先引入

use App\Jobs\QueueSmsSendJob;

在下面调用

dispatch(new QueueSmsSendJob($v['send_no'],$v['content'],$v['id'],$info['user_id']));//括号里面是你要传到QueueSmsSendJob里面的

5.一切都完成后,执行这个命令,运行队列进程,后面的tries是最大失败次数3次,队列进程开始运行后,会持续监听队列,直至你手动停止或关闭终端

php artisan queue:work --tries=3

这个是非常浅薄的理解,队列执行前或执行后的操作,这个还没搞懂,有会的欢迎交流。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值