mq
https://www.zhihu.com/question/54152397
https://blog.csdn.net/weixin_41423450/article/details/84850397 消息队列 + redis + 秒杀
kafka
RabbitMQ
消息队列中间件
特点
先进先出 食堂排队吃饭
生产者 product : 把数据放到消息队列
消费者 Consumer : 从消息队列里边取数据
消息队列好处
解耦 :每个成员不必受其他成员影响,可以更独立自主,只通过一个简单的容器来联系
异步 : 同时进行功能处理
削锋/限流 :
使用成本
引入复杂度
暂时的不一致性
消费者怎么得到消息队列的数据
生产者将数据放到消息队列中,消息队列有数据了,主动叫消费者去拿(俗称push)
消费者不断去轮训消息队列,看看有没有新的数据,如果有就消费(俗称pull)
beanstalkd 消息队列
//安装yum install -y beanstalkd//后台启动nohup beanstalkd &//安装php消息队列包composer require pda/pheanstalk//创建生产者public function index(){//创建队列生产者$pda = Pheanstalk::create('127.0.0.1');//dump($pda->stats());//模拟数据$data = ['price' => 1.00,'name' => '测试商品'];//投入到管道中 等待消费者消费 参数分别是 1 数据 2优先级 3设置延迟时间处理$id = $pda->useTube('order')->put(json_encode($data),0,10);dump($id);}//创建消费者消费任务数据public function xiaofei(){$pda = Pheanstalk::create('127.0.0.1');//获取管道并消费$job = $pda->watch('order')->ignore('default')->reserve();//获取任务id$id = $job->getId();dump($id);//获取任务数据$data = $job->getData();dump($data);//处理完任务后就删除掉$pda->delete($job);}
