zookeeper实现商品秒杀抢购

现行反革命房天下友每一日晚就餐之后除了看电视机又多了一项工作,那便是每晚九点准时在Computer前边用手提式有线电话机和计算机双平台同抢房天下“家居装饰抢购”天天推出的一款特价家居装饰产品。

package com.test;

import java.io.IOException;
import java.util.List;
import java.util.concurrent.CyclicBarrier;

import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.EventType;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.Stat;

public class Main {

    public static void main(String[] args) throws IOException, KeeperException, InterruptedException {

        ZooKeeper zk = new ZooKeeper("127.0.0.1", 2000, null);
        Stat st = zk.exists("/goods", false);
        if (st == null) {
            zk.create("/goods", new byte[0], Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
        }
        String[] goods = { "iPhone6s", "小米移动电源" };
        for (String g : goods) {
            zk.create("/goods/"   g, new byte[0], Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
        }

        int threadCount = 5;
        CyclicBarrier cb = new CyclicBarrier(threadCount); // 为了更好地表示并发,这里用了CyclicBarrier类
        for (int i = 0; i < threadCount; i  ) {
            // 用多线程摸您多用户
            new Thread(new Thread1(cb)).start();
        }
        System.in.read();

    }

    static class Thread1 implements Runnable {
        ZooKeeper zk = null;
        CyclicBarrier cb;

        // 是否还没有抢过商品
        boolean isNotGet = true;

        public Thread1(CyclicBarrier cb) {
            this.cb = cb;
        }

        private void snatchGoods() throws Exception {

            // 获取商品库存
            List<String> goodsList = zk.getChildren("/goods", true);// 获取商品列表并监控变化,如果在和其它用户抢购同一个商品时没抢到的情况下可再次监控其它商品
            if (goodsList.isEmpty()) {
                // 商品库存为空,表示商品抢光了
                System.out.println(Thread.currentThread().getName()   "没抢到商品");
            } else {
                // 获取第一个商品
                String goods = goodsList.get(0);
                try {
                    // 从内存中删除商品节点,表示抢购,如果删除失败,就表示没抢到这个商品,并进入到下面的catch块中
                    zk.delete("/goods/"   goods, -1);
                    // 限制每个用户只能抢购一件商品,设置false表示已经抢购过了
                    isNotGet = false;
                    System.out.println(Thread.currentThread().getName()   "抢到了"   goods);
                } catch (Exception e) {

                }
            }
        }

        @Override
        public void run() {
            try {
                zk = new ZooKeeper("127.0.0.1:2181", 2000, new Watcher() {
                    @Override
                    public void process(WatchedEvent event) {
                        try {
                            EventType type = event.getType();
                            if (isNotGet) {
                                if (type == EventType.None) {
                                    // 用户第一次访问,则立即执行商品的抢购
                                    snatchGoods();
                                } else if (type == EventType.NodeChildrenChanged) {
                                    // 抢购一件商品失败后,再抢购另一件商品
                                    snatchGoods();
                                }
                            }
                        } catch (Exception e) {
                            System.out.println(e.getMessage());
                        }
                    }
                });
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
  1. 动用三十二线程模拟多客商抢购
  2. 顾客率先次访谈,则随即实行商品的抢购
  3. 抢购一件商品退步后,再抢购另一件货色
  4. 货色仓库储存为空,表示商品抢光了

图片 1

zookeeper完毕货色秒杀抢购:

询问抄底价商品 立即到位“家居装饰抢购”

秒杀活动是有些购物平台推出的汇聚人气的活动,一般物品数量相当少,价格很方便,限定开始选购的年华,会在以秒为单位的大运内被购买一空。举个例子原价千元照旧万元的商品以一元的标售,但数目唯有一件,在某天的某部时刻初叶贩卖,那就招致众多个人去抢这一件货品。

二零一二年三月二十三日21点,房天下主办的“家居装饰抢购”惊动首抢。

获取商品列表并监督变化,固然在和别的客户抢购同三个货色时没抢到的动静下可重复监察和控制另外商品

首都首个款式歌唱家产品--霍尔茨T型门就以惊爆价100元开抢,引爆网民不小热情,摩拳擦掌一触即发,争当“幸运儿”,热情高涨史无前例。21点整准时开通就以惊人的速度被秒杀,开始拍戏后一分钟左右5个仓库储存商品已被抢购一空,页面每几分钟被刷新一遍,何况在20分钟内全部给付成功。数百名网民就因为动作稍慢没能立即提交保障金而抢拍失利,只可以缺憾的指望第二天的商品。

抢购一件货品战败后,再抢购另一件商品

图片 2

运作往往,打字与印刷出如下结果:

“家装抢购”是为服务装修期业主,基于房天下PC和WAP平台推出的贰个新的装修期业主劳动产品。每天推出价的品牌家居装饰用品,业主能够应用手提式有线电话机、计算机双阳台在每晚21点准时抢购。而“家居装饰抢购”供业主抢购的制品范围更小到灯具大到家具一一饱含,並且折扣挑衅底线,让房天下会员能真的“抢”到实惠!

Thread-4-EventThread抢到了iPhone6s
Thread-1-EventThread抢到了小米移动电源
Thread-2-EventThread没抢到商品
Thread-3-EventThread没抢到商品
Thread-0-EventThread没抢到商品


Thread-3-EventThread抢到了iPhone6s
Thread-2-EventThread抢到了小米移动电源
Thread-4-EventThread没抢到商品
Thread-1-EventThread没抢到商品
Thread-0-EventThread没抢到商品


Thread-0-EventThread抢到了iPhone6s
Thread-3-EventThread抢到了小米移动电源
Thread-4-EventThread没抢到商品
Thread-2-EventThread没抢到商品
Thread-1-EventThread没抢到商品


Thread-2-EventThread抢到了iPhone6s
Thread-4-EventThread抢到了小米移动电源
Thread-0-EventThread没抢到商品
Thread-3-EventThread没抢到商品
Thread-1-EventThread没抢到商品

这一类型还未推出,就获得了大范围网民的招待,近日已经在全国推广,通过四天的运营,获得了房天下友普及好评。

能够见到,两件商品,多个线程并发抢购,总是唯有多少个线程分别抢到分裂的物品。

报社新闻报道工作者访谈了一个人成功拍到霍尔茨木门的COO,他表示多谢房天下实行那样的位移,巨惠的力度前所未有,并且都是品牌商品,性能也足以得到保障,目前就在等候厂家与他开展联系,之后就能够将心仪的商品带回家了。

另壹位网上朋友则对访员代表,尽管本身并未有抢到,可是很开心这种样式,而且还有大概会每日关怀“家居装饰抢购”的新动态,相信一定能够抢到本人喜好的货品。

法国首都房天下理事表示,“家居装饰抢购”已经开通了八日,获得了花费者的终将,不过出于是第一尝试,还在持续储存经验,以期为买主提供更好的服务。首先在标价方面为开销者提供价,每日有刻意职业人士在网络开展价格比较,以管教抢购商品价位为最降价;其次在售后服务方面也针对顾客做了很科学钻探,依照业主的必要提供、贴心的劳动。

再便是他也提示,比相当多COO未有抢拍到,是因为作业做的阙如,提前收藏或开展短信提示,房天下将临近提醒抢拍的时间,提前准备好手提式有线电话机、信用卡支付宝等必备品。其余下单后尚未马上支付保证金,20分钟后订单被视为无效,其余业主可继续抢购!

业夫职员表示,要盘活家居电商,就不能够不依据家居网购的表征开展网站优化,从页面设计、购物流程、支付花招、物流配送和售后服务等地点刷新网购体验。

而房天下“家居装饰抢购”产品将改动现行反革命较为常见的家居电商形式,将最优产品、最优价格和最优购物心得相结合,另辟蹊径给耗费者带来全新的家居电商体验,也将会产生推进行业发展的福利尝试。

当时到位活动请详询://home.fang.com/mall/qiang/

本文由美高梅4858官方网站发布于美高梅4858官方网站,转载请注明出处:zookeeper实现商品秒杀抢购

您可能还会对下面的文章感兴趣: