beanstlkd实战小demo

//生产者类
public function index()
    {
    	//beanstalkd 消息队列  默认端口11300
	    $pda = Pheanstalk::create('127.0.0.1');
	    //生产者
	    $tubeName = 'order';//管道名称
		//模拟100人请求秒杀
	    for($i = 0;$i<100;$i++){
			$uid = rand(10000,99999);
			//获取当前队列已经拥有的数量,人数小于10 加入队列
		    if(!in_array($tubeName,$pda->listTubes())){
			    $pda->useTube($tubeName);
		    }
		    $jobsNum = $pda->statsTube($tubeName)['total-jobs'];
		    $num = 10;//秒杀数量
		    if($jobsNum<$num){
		    	$pda->useTube($tubeName)->put($uid);
		    	dump($uid."秒杀成功<br>");
		    }else{
		    	//队列达到10人 秒杀结束
			    dump('秒杀已结束<br>');
		    }
	    }

		dump($pda->statsTube($tubeName));
	    dump($pda->listTubes());
    }
 //消费者类
 public function xiaofei(){
    	$pda = Pheanstalk::create('127.0.0.1');
    	//获取管道 并消费
	    $tubeName = 'order';//管道名称
	    //取出管道中任务总数
	    $jobNum = $pda->statsTube($tubeName)['total-jobs'];
	    dump('任务总数:'.$jobNum);
	    //循环取出管道中任务 插入数据库
	    for ($i =0;$i<$jobNum;$i++){
	    	//监听管道 将任务取出
		    $job = $pda->watch($tubeName)->reserve();
		    //取出uid
		    $uid = $job->getData();
		    if(!$uid){
		    	sleep(2);
		    	continue;
		    }
		    //生成订单号
			$oid = $this->createOrderId();
		    $orderData = [
				'userid' => $uid,
			    'orderid' => $oid,
			    'addtime' => time()
		    ];
		    $order = Order::create($orderData);
		    $id = $order->id;
		    dump($id);
		    if($id){
		    	$pda->delete($job);
		    }
	    }

    }

	public function createOrderId(){
    	$str = uniqid();//基于以微秒计的当前时间,生成一个唯一的 ID。
		$str1 = substr($str,7,13);//截取13个长度
		$arr = str_split($str1,1);//字符串转为数组
		$arr1 = array_map('ord',$arr);//为数组的每个元素应用回调函数 ord 得到指定字符的ASCII
		$str3 = implode(NULL,$arr1);//数组转字符串
		$str = substr($str3,0,8);

    	return $str;
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值