84669 personnes étudient
152542 personnes étudient
20005 personnes étudient
5487 personnes étudient
7821 personnes étudient
359900 personnes étudient
3350 personnes étudient
180660 personnes étudient
48569 personnes étudient
18603 personnes étudient
40936 personnes étudient
1549 personnes étudient
1183 personnes étudient
32909 personnes étudient
我们知道发送邮件或短信可以添加到队列里进行异步任务 而不会因为延迟阻塞当前操作。
如果我们要给一万个用户发一封邮件,我需要把这1万个任务添加到队列里。但是我如果程序中直接把一万个任务添加到队列,一次性循环或批量操作这样会阻塞当前操作,超时或者其他原因很容易出问题,你懂的。所以我添加1万个任务到队列的这个操作也应该异步任务操作吧?,但是怎么做比较优雅?
人生最曼妙的风景,竟是内心的淡定与从容!
假设你的业务场景是:给站内所有会员发送通知邮件
那么你的任务队列本身的程序实现逻辑就是等待消息然后“获取所有会员邮箱,然后在一个任务中循环给所有会员发送通知邮件”(实际上应该还有更多的优化空间,比如支持区间的会员ID,规则的会员ID等等)
所以假设你后台有一个按钮是给所有会员发送通知,点击以后实际上只是给这个任务队列一个消息通知让他执行任务,而不是你点了那个按钮要获取所有会员邮箱,然后拆分成N个消息通知任务队列执行
你可以看看 pilishen 的laravel团队任务管理第三套 有讲 邮件发送的
直接把"添加1万个任务到队列并且发送"添加到队列
队列消费者读取到这个消息后,插入1万个任务到队列,剩下的1万条任务的执行也是通过队列的
网上找了一个laravel操作给手机发送短信代码,可以参考参考
//1.进入视图 手机号: 验证码: 登录/注册 //2.填写相应的路由 Route::any('registers','LoginController@login_do'); //3.写出相应的控制器 public function login_do(){ $iphone=$_GET['iphone']; $code=rand(1000,9999); setcookie('code',$code,time()+600); //echo $url $url='http://api.sms.cn/sms/?=send&uid=*********&pwd=**********&template=384859&mobile='.$iphone.'&content={"code":"'.$code.'"}'; $data=array(); $method='GET'; $res=$this->curlPost($url,$data,$method); echo $res; } /*curlpost传值*/ public function curlPost($url,$data,$method){ $ch = curl_init(); //1.初始化 curl_setopt($ch, CURLOPT_URL, $url); //2.请求地址 curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);//3.请求方式 //4.参数如下 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);//https curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');//模拟浏览器 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_AUTOREFERER, 1); curl_setopt($ch, CURLOPT_HTTPHEADER,array('Accept-Encoding: gzip, deflate'));//gzip解压内容 curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate'); if($method=="POST"){//5.post方式的时候添加数据 curl_setopt($ch, CURLOPT_POSTFIELDS, $data); } curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $tmpInfo = curl_exec($ch);//6.执行 if (curl_errno($ch)) {//7.如果出错 return curl_error($ch); } curl_close($ch);//8.关闭 return $tmpInfo; } //4.完毕!
登录/注册
假设你的业务场景是:给站内所有会员发送通知邮件
那么你的任务队列本身的程序实现逻辑就是等待消息然后“获取所有会员邮箱,然后在一个任务中循环给所有会员发送通知邮件”(实际上应该还有更多的优化空间,比如支持区间的会员ID,规则的会员ID等等)
所以假设你后台有一个按钮是给所有会员发送通知,点击以后实际上只是给这个任务队列一个消息通知让他执行任务,而不是你点了那个按钮要获取所有会员邮箱,然后拆分成N个消息通知任务队列执行
你可以看看 pilishen 的laravel团队任务管理第三套 有讲 邮件发送的
直接把
"添加1万个任务到队列并且发送"
添加到队列
队列消费者读取到这个消息后,插入1万个任务到队列,剩下的1万条任务的执行也是通过队列的
网上找了一个laravel操作给手机发送短信代码,可以参考参考