美文网首页
php-消息队列

php-消息队列

作者: AGEGG | 来源:发表于2020-04-04 20:47 被阅读0次

    主要内容

    1.消息队列的概念,原理和场景
    2.解耦案例:队列处理订单系统和配送系统
    3.流量削峰案例:Redis的List类型实现秒杀
    RabbitMQ:更专业的消息系统实现方案

    1.消息队列的概念、原理、实现方式

    1.1消息队列概念

    队列结构的中间件
    消息放入后,不需要立即处理
    由订阅者/消费者按顺序处理


    image.png
    1.3 应用场景

    冗余
    解耦
    流量削峰
    异步通信
    拓展性
    排序保证

    常见队列实现优缺点

    队列介质
    1.Mysql:可靠性,易实现,速度慢
    2.Redis: 速度快,单条大消息包时效率低
    3.消息系统:专业性强,可靠,学习成本高

    消息处理触发机制

    1.死循环方式读取:易实现,故障时无法及时恢复
    2.定时任务:压力均分,有处理量上限
    3.守护进程:类似于PHP-FPM和PHP-CG,需要shell基础

    2.解耦案例:队列处理订单系统和配送系统

    image.png image.png

    思路:使用队列将订单系统与配送系统解耦
    1.订单系统同以往记录到mysql
    2.配送处理系统每次查询数个未完成订单标记为代执行订单,执行配送业务后标记为以完成
    3.使用定时任务定时执行配送处理系统

    image.png image.png

    3.流量削峰案例:Redis的list类型实现秒杀

    3.1redis数据类型中的list类型

    双向链表
    LPUSH/LPUSHX:将值插入到(/存在的)列表头部
    LPUSHX:将值插入到存在的列表头部,若不存在操作无效
    RPUSH/RPUSHX:将值插入到(/存在的)列表尾部
    LPOP:移出并获取列表的第一个元素
    RPOP:移出并获取列表的最后一个元素
    LTRIM:保留指定区间内的元素
    LLEN:获取列表长度
    LSET:通过索引设置列表元素的值
    LINDEX:通过索引获取列表中的元素
    LRANGE:获取列表指定范围的元素


    image.png image.png

    思路:
    1.存到redis的list中形成队列
    2.从redis队列中取出保存数据库

    RabbitMQ

    image.png image.png

    相关文章

      网友评论

          本文标题:php-消息队列

          本文链接:https://www.haomeiwen.com/subject/dsjouhtx.html