使用作业向用户发送多条短信 [英] Send Multiple SMS to users using Jobs

查看:0
本文介绍了使用作业向用户发送多条短信的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有大约25K个用户,我想为他们每个人发送短信。

我做了以下工作

<?php
namespace AppJobs;
use AppUser;
use AppJobsJob;
use IlluminateQueueSerializesModels;
use IlluminateQueueInteractsWithQueue;
use IlluminateContractsQueueShouldQueue;
use GuzzleHttpClient;
use GuzzleHttpPostPostBodyInterface;
use GuzzleHttpExceptionClientException;

class SendSMS extends Job implements ShouldQueue
{
    use InteractsWithQueue, SerializesModels;
    protected $user;
    public function __construct($user)
    {
        $this->user = $user;
    }

     /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
            $client = new GuzzleHttpClient(['base_uri' => "example.com"]);

            $messageBody = "Message";
            $data = ["messageBody"=>$messageBody,
                    "msisdn"=>$this->user];

            $client->request('POST', 'SendSMS',[ 'json'=>$data]);

        }
    }

我正在使用作业控制器分派作业

<?php

namespace AppHttpControllers;
use AppJobsSendSMS;

use IlluminateHttpRequest;
use AppUser;
use AppHttpRequests;
use AppHttpControllersController;

class JobController extends Controller
{

    public function sendSMS()
    {
        $users = User::all(); 
        foreach ($users as $user) 
        {
            $job = (new SendSMS($user->mobile))->onQueue('sms');

            $this->dispatch($job);
            echo $player->mobile;
            echo "<br/>";
        }
    }
}

我使用命令行

运行了队列

现在我有两个问题

第一:请求非常慢,这意味着我等待了大约20秒,等待Http请求完成,然后转到下一个用户,我可以发送请求并转到第二个用户,而不等待短信API的响应吗?

第二:我是否可以在不实际运行控制器中的方法的情况下运行调度,例如,我希望使用命令行或任何其他方法将作业排队。

推荐答案

不是为每个移动用户创建作业,而是创建SendSMSToAllUsers作业,您的请求将非常快速。SendSMSToAllUsers作业将获取所有用户,并为每个用户调度一个新作业。

要在不实际运行控制器中的方法的情况下进行调度,只需在任何类(Arartian命令、队列作业等)中包含IlluminateFoundationBusDispatchesJobs特征并使用$this->dispatch($job)方法。

为了获得更好的性能,要么使用GUZLE的异步功能,要么将您的短信作业调度到多个队列,并并行运行几个队列工作进程,使用参数--queue=myqueue每个队列一个。拥有25K个用户就足以支持使用多个队列。

例如,您可以创建10个队列:‘sms-0’用于以0结尾的电话号码,‘sms-1’用于以1结尾的电话号码,...诸若此类。或者,您可以为奇数或偶数创建两个队列:‘sms-odd’和‘sms-Even’。

这篇关于使用作业向用户发送多条短信的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆