【发布时间】:2016-07-18 02:42:13
【问题描述】:
我有大约 25,000 个用户,我想为每个用户发送短信。
我做了以下工作,
<?php
namespace App\Jobs;
use App\User;
use App\Jobs\Job;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use GuzzleHttp\Client;
use GuzzleHttp\Post\PostBodyInterface;
use GuzzleHttp\Exception\ClientException;
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 \GuzzleHttp\Client(['base_uri' => "example.com"]);
$messageBody = "Message";
$data = ["messageBody"=>$messageBody,
"msisdn"=>$this->user];
$client->request('POST', 'SendSMS',[ 'json'=>$data]);
}
}
我正在使用 JobController 分派作业
<?php
namespace App\Http\Controllers;
use App\Jobs\SendSMS;
use Illuminate\Http\Request;
use App\User;
use App\Http\Requests;
use App\Http\Controllers\Controller;
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 请求完成后再发送给下一个用户,我可以发送请求并转到第二个用户而不等待短信的响应接口?
second:我可以在不实际运行控制器中的方法的情况下运行调度,例如我希望使用命令行或任何其他方法对作业进行排队。
【问题讨论】:
-
尝试做异步请求,它的速度要快得多,但即使完成它也没有到达用户
标签: laravel sms scheduled-tasks jobs guzzle