zookeeper实现商品秒杀抢购

前段时间安居客友每一天晚用完餐之后除了看TV又多了一项专业,那就是每晚九点按时在计算机眼前用手提式有线电话机和处理器双平台同抢365房产网“家居装饰抢购”每天推出的一款特价家装成品。

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完毕货品秒杀抢购:

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

秒杀活动是部分购物平台推出的集聚人气的移动,日常货品数量相当少,价格很实惠,约束最先选购的年华,会在以秒为单位的大运内被购买一空。比方原价千元以致万元的货物以一元的价位贩卖,但多少唯有一件,在某天的某部时刻开端销售,那就招致广大人去抢这一件物品。

二零一一年10月四日21点,贝壳找房主办的“家装抢购”震惊首抢。

收获商品列表并监督变化,假若在和任何顾客抢购同三个货物时没抢到的情景下可另行监控别的商品

京城首个款式歌唱家付加物--霍尔茨T型门就以惊爆价100元开抢,引爆网络好友非常大热情,捋臂将拳整装待发,争当“幸运儿”,热情高涨无与比伦。21点整依期开通就以惊人的快慢被秒杀,开始拍戏后一分钟左右5个仓库储存商品已被抢购一空,页面每几分钟被刷新二遍,何况在20分钟内一切给付成功。数百名网络朋友就因为动作稍慢未能立时送交保险金而抢拍失败,只可以缺憾的想望第二天的商品。

抢购一件货色败北后,再抢购另一件货色

图片 2

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

“家居装饰抢购”是为劳动装修期业主,基于安居客PC和WAP平台推出的三个新的装修期业主劳动产物。每日推出价的牌子家居装饰用品,业主能够利用手机、Computer双阳台在每晚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没抢到商品

这一门类还没推出,就获得了宽广网上亲密的朋友的招待,近日早已在举国一致推广,通过19日的运转,获得了优客逸家友普遍美评。

能够看看,两件货物,多个线程并发抢购,总是唯有五个线程分别抢到差别的物品。

央视报事人征集了壹人成功拍到霍尔茨木门的高管,他表示多谢365房产网举行那样的运动,巨惠的力度前无古代人,并且都是品牌商品,品质也得以获得保险,近期就在等候商家与他举行联络,之后就能够将心仪的商品带归家了。

另一个人网民则对报事人代表,即便本身未有抢到,不过相当的痛爱这种格局,并且还恐怕会每一天关切“家装抢购”的新动态,相信一定能够抢到本人心仪的商品。

京师安居客管事人表示,“家居装饰抢购”已经开通了八日,取得了消费者的一定,但是出于是首先尝试,还在一再聚成堆阅世,以期为顾客提供越来越好的服务。首先在标价方面为消费者提供价,每日有特意工作职员在英特网开展价格相比较之下,以保障抢购商品价位为最减价;其次在售后服务方面也本着消费者做了很调查研讨,依照业主的供给提供、贴心的服务。

再就是他也唤起,比很多总老总未有抢拍到,是因为作业做的难感觉继,提前收藏或开展短信提示,优客逸家将左近提示抢拍的时光,提前准备好手提式有线话机、信用卡支付宝等必备品。此外下单后不曾即时支付有限支撑金,20分钟后订单被视为无效,其余业主可一连抢购!

业老婆士表示,要抓牢家居电子商务,就必得依赖家居网上买东西的特色举行网址优化,从页面设计、购物流程、支付花招、物流配送和售后服务等方面刷新网上买东西体验。

而贝壳找房“家居装饰抢购”产物将转移现行反革命比较不感到奇的家居电子商务格局,将最优产品、最优价格和最优购物体验相结合,独竖一帜给买主带给全新的家居电子商务体验,也将会化为促实行当提升的有利尝试。

立马到位活动请详询://home.fang.com/mall/qiang/

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

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