mq
    https://www.zhihu.com/question/54152397
    https://blog.csdn.net/weixin_41423450/article/details/84850397 消息队列 + redis + 秒杀
    kafka
    RabbitMQ
    消息队列中间件
    特点
    先进先出 食堂排队吃饭
    生产者 product : 把数据放到消息队列
    消费者 Consumer 从消息队列里边取数据

    消息队列好处
    解耦 :每个成员不必受其他成员影响,可以更独立自主,只通过一个简单的容器来联系
    异步 : 同时进行功能处理
    削锋/限流 :
    使用成本
    引入复杂度
    暂时的不一致性
    消费者怎么得到消息队列的数据
    生产者将数据放到消息队列中,消息队列有数据了,主动叫消费者去拿(俗称push)
    消费者不断去轮训消息队列,看看有没有新的数据,如果有就消费(俗称pull)

    beanstalkd 消息队列

    1. //安装
    2. yum install -y beanstalkd
    3. //后台启动
    4. nohup beanstalkd &
    5. //安装php消息队列包
    6. composer require pda/pheanstalk
    7. //创建生产者
    8. public function index()
    9. {
    10. //创建队列生产者
    11. $pda = Pheanstalk::create('127.0.0.1');
    12. //dump($pda->stats());
    13. //模拟数据
    14. $data = [
    15. 'price' => 1.00,
    16. 'name' => '测试商品'
    17. ];
    18. //投入到管道中 等待消费者消费 参数分别是 1 数据 2优先级 3设置延迟时间处理
    19. $id = $pda->useTube('order')->put(json_encode($data),0,10);
    20. dump($id);
    21. }
    22. //创建消费者消费任务数据
    23. public function xiaofei()
    24. {
    25. $pda = Pheanstalk::create('127.0.0.1');
    26. //获取管道并消费
    27. $job = $pda->watch('order')->ignore('default')->reserve();
    28. //获取任务id
    29. $id = $job->getId();
    30. dump($id);
    31. //获取任务数据
    32. $data = $job->getData();
    33. dump($data);
    34. //处理完任务后就删除掉
    35. $pda->delete($job);
    36. }