Laravel框架中使用队列能解决什么问题,怎样应用
Admin 2022-06-15 群英技术资讯 1287 次浏览
在这篇文章中,我们来学习一下“Laravel框架中使用队列能解决什么问题,怎样应用”的相关知识,下文有详细的讲解,易于大家学习和理解,有需要的朋友可以借鉴参考,下面就请大家跟着小编的思路一起来学习一下吧。在laravel中,使用队列可以解决大并发和多种语言通信接口等问题。可以将耗时的任务或者不能同时大量并行的任务封装起来传输到消息队列中,由处理程序不断从消息队列中提取消息并进行处理,这样用过消息队列就可以使得在大并发情况下不再堵塞。

本文操作环境:Windows10系统、Laravel6版、Dell G3电脑。
消息队列对于大型的Web项目来说是必不可少的一个模块,通过消息队列可以解决大并发和多种语言通信接口等问题。
对于大并发的问题,可以将耗时的任务或者不能同时大量并行的任务封装起来传输到消息队列中,由处理程序不断从消息队列中提取消息并进行处理,这样通过消息队列的缓冲可以使得在大并发情况下不再阻塞,如果性能不够用还可以添加多个处理任务从消息队列中获取消息进行处理。
比如数据库的操作,当对数据库的读、写操作过多时就会存在锁表等问题,读的问题可以通过缓存等方案解决,写的问题就需要消息队列来解决。
而且,在大型的Web项目开发中,很多情况下不可能通过一种语言实现,需要发挥不同语言的优势,比如PHP,虽然在理论意义上它可以做Web开发中的所有事情,但是有些问题用它解决效率将会非常低,比如实时socket连接和分布式事务处理等。
使用 Laravel 的消息队列处理异步任务,Redis 作为队列数据库,Supervisor 监控脚本异常中断并自动重启,这是 Laravel 处理队列任务的标准流程,但是实际中可能还会出现各种各样的问题,为了保证系统可靠性,还要注意几个问题。
一、执行失败重试次数设置
一定要设置任务执行失败重试次数,避免无限失败重试,超过重试次数 Laravel 会默认写到失败任务表中,也可以自己写执行失败后续处理逻辑。
php artisan queue:work redis --tries=3
需要先执行以下命令创建数据表:
php artisan queue:failed-table
php artisan migrate
二、程序异常的处理
有时候程序执行过程会发生异常,比如依赖其他接口,请求 HTTP 接口超时等等,如果不捕捉异常,那么当前这个队列就会中断不能继续运行下去,比如给 10000 个用户推送内容,需要依赖接口推送,如果中间的请求挂了就会影响到后面的推送。
这里的异常是指程序执行过程中发生的异常,不是指常驻进程挂掉,程序异常不一定导致常驻进程中断,况且进程中断有 Supervisor 监控并重启。
如捕获异常代码片段:
try {undefined
$r = $client->request('POST', '', [
'query' => [
'client_name' => 'filemail',
'client_version' => '1.0',
'client_sequence' => 0,
'uid' => 692934013,//119481237
'r' => 1508312484,
],
'body' => \GuzzleHttp\json_encode($body),
]);
$result = $r->getBody()->getContents();
$result = json_decode($result, true);
if ($result['result'] == 0) {undefined
info("sendMail fail:" . json_encode($result));
$this->pushLog($task['id'], $task['mail_id'], implode(',', $userIds), json_encode($result), 0);
} else {undefined
Log::warning("sendMail fail:" . json_encode($result));
$this->pushLog($task['id'], $task['mail_id'], implode(',', $userIds), json_encode($result), $result['result']);
}
} catch (RequestException $e) {undefined
Log::warning('RequestException' . $e->getMessage());
} catch (Exception $e) {undefined
Log::emergency('Exception' . $e->getMessage());
}
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
具体问题描述则是“如何编写一个 PHP 程序来计算由平面上三个给定点构成的圆的半径和中心坐标 (x, y)”?下文有实例供大家参考,对大家了解操作过程或相关知识有一定的帮助,而且实用性强,希望这篇文章能帮助大家,下面我们一起来了解看看吧。
php中swoft框架配置环境:1、将swoft的官方项目在docker中运行起来,然后使用composer安装好它的依赖包。2、设置宿主机与容器共享文件,注意共享的前提是docker容器中的文件地址应该和宿主机对应的文件是一样的。
这篇文章主要介绍了PHP架构及原理知识点以及相关实例讲解,需要的朋友们参考下。
laravel中has方法可以用来查询数据间是否有关联关系,常用于判断当前请求中是否含有指定的值,如果请求中存在该值则has()方法将会返回true,当给定一个数组时,该方法将会判断指定的值是否全部存在,语法为“has('name')”。
小编也是刚接触swoole,官方文档给swoole demo信息量也非常的少,有些地方也没有说清楚,折腾了一,两天websocket终于握手成功,写下我的心得,希望能给有需要的人一些帮助。首先我先介绍我的运行环境是直接放在外网服务器的,程序运行环境我就不多说了大家可以参考swoole官网,我是直接通过ip 进行访问的,在这其中小编遇到一个坑,那就是我们让htpp服务器或者websocket监听...
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008