Zookeeper

【黑马程序员Zookeeper视频教程,快速入门zookeeper技术】

文章目录

  • Zookeeper
  • 4 Zookeeper JavaAPI 操作
    • 4.9 模拟12306 售票案例
      • 4.9.1 Curator 实现分布式锁 API
      • 4.9.2 分布式锁案例 - 模拟12306 售票

4 Zookeeper JavaAPI 操作

4.9 模拟12306 售票案例

4.9.1 Curator 实现分布式锁 API

在Curator中有五种锁方案:

  • InterProcessSemaphoreMutex:分布式排它锁(非可重入锁)
  • InterProcessMutex:分布式可重入排它锁
  • InterProcessReadWriteLock:分布式读写锁
  • InterProcessMultiLock:将多个锁作为单个实体管理的容器
  • InterProcessSemaphoreV2:共享信号量
4.9.2 分布式锁案例 - 模拟12306 售票

平时我们 用这些,它们其实都不是 真正出票 的,它们只是代理商

12306 才是真正的出票 的

12306 不多解释,那个请求量,单机…,肯定会搭 集群的

代理商访问 12306, 然后12306 访问自己的 数据库【当然数据库 也会做成集群,对外访问接口一个】

资源在谁那儿,分布式锁 就加到 谁那儿,所以肯定是在 12306 上加

引入Zookeeper 后,12306 就可以作为 Zookeeper 的客户端 【分布式锁 由Zookeeper 提供】

【简单模拟】

先来一个票类

package com.dingjiaxiong.curator;/*** ClassName: Ticket12306* date: 2022/11/15 15:18** @author DingJiaxiong*/public class Ticket12306 implements Runnable{private int tickets = 10; //数据库的票数@Overridepublic void run() {//一直对外提供服务while (true){if (tickets > 0){System.out.println(Thread.currentThread() + ":" + tickets);tickets --;}}}
}

来一个 新的测试类

package com.dingjiaxiong.curator;/*** ClassName: LockTest* date: 2022/11/15 15:17** @author DingJiaxiong*/public class LockTest {public static void main(String[] args) {Ticket12306 ticket12306 = new Ticket12306();//创建客户端【买票的】Thread t1 = new Thread(ticket12306,"携程");Thread t2 = new Thread(ticket12306,"飞猪");t1.start();t2.start();}
}

现在直接运行就会 产生 并发问题,看看结果

很明显这样是不行的

【现在就给 它加上分布式 锁】

package com.dingjiaxiong.curator;import org.apache.curator.RetryPolicy;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.framework.recipes.locks.InterProcessMutex;
import org.apache.curator.retry.ExponentialBackoffRetry;import java.util.concurrent.TimeUnit;/*** ClassName: Ticket12306* date: 2022/11/15 15:18** @author DingJiaxiong*/public class Ticket12306 implements Runnable {private int tickets = 10; //数据库的票数private InterProcessMutex lock;public Ticket12306() {RetryPolicy retryPolicy = new ExponentialBackoffRetry(3000, 10);CuratorFramework client = CuratorFrameworkFactory.builder().connectString("zookeeper的IP :2181").sessionTimeoutMs(60 * 1000).connectionTimeoutMs(15 * 1000).retryPolicy(retryPolicy).build();client.start();lock = new InterProcessMutex(client, "/lock");}@Overridepublic void run() {//一直对外提供服务while (true) {//加个【获取】锁try {lock.acquire(3, TimeUnit.SECONDS);if (tickets > 0) {System.out.println(Thread.currentThread() + ":" + tickets);tickets--;}} catch (Exception e) {e.printStackTrace();} finally {// 释放锁try {lock.release();} catch (Exception e) {e.printStackTrace();}}}}
}

OK,直接重新运行测试类

这下就不会 冲了

看看命令行 客户端

多看几次

就是我们 之前说的 使用临时顺序节点实现的东西

【那就这样吧】

Zookeeper 4 Zookeeper JavaAPI 操作 4.9 模拟12306 售票案例相关推荐

  1. Zookeeper命令操作(初始Zookeeper、JavaAPI操作、分布式锁实现、模拟12306售票分布式锁、Zookeeper集群搭建、选举投票)

    Zookeeper命令操作(初始Zookeeper.JavaAPI操作.分布式锁实现.模拟12306售票分布式锁.Zookeeper集群搭建.选举投票) 1.初始Zookeeper Zookeeper ...

  2. 【Java编程学习】案例8-4 模拟12306售票

    本案例要求编写一个模拟12306售票的系统,要求如下:假设需要抢票十次才可以抢到一张票,会员需要300毫秒抢一次,普通用户需要800毫秒抢一次. 代码如下 package lianxi;//模拟123 ...

  3. Java两种多线程方式对比总结 模拟铁路售票案例

    继承Thread类创建多线程 在Thread类中,提供了一个start()方法,会启动一个新线程并自动调用run()方法 假设售票厅有五个窗口可发售200张票.200张票可以看作是共享的资源,五个窗口 ...

  4. Zookeeper常用命令操作,javaAPI操作之Curator框架 API

    浅谈:Zookeeper Zookeeper 概念 • Zookeeper 是 Apache Hadoop 项目下的一个子项目,是一个树形目录服务. • Zookeeper 翻译过来就是 动物园管理员 ...

  5. 【Java从0到架构师】Zookeeper 应用 - Java 客户端操作、服务器动态感知、分布式锁业务处理

    分布式基石 Zookeeper 框架全面剖析 Java 客户端操作 Java 客户端 API 服务器的动态感知 服务注册 服务发现 分布式锁业务处理 单机环境(一个虚拟机中) 分布式环境_同名节点 分 ...

  6. zookeeper常用命令行操作

    zookeeper常用命令行操作 输入help显示命令提示 [zk: localhost:2181(CONNECTED) 0] help ZooKeeper -server host:port cmd ...

  7. 【Zookeeper】Zookeeper 管理文档

    Zookeeper 管理文档 文章目录 Zookeeper 管理文档 一.部署 1.1 系统要求 1.1.1 支持系统平台 1.1.2 支持情况 1.1.3 所需软件 1.2 集群(多服务器)部署 1 ...

  8. HBase常用Shell与JavaAPI操作

    HBase常用Shell与JavaAPI操作 1.常用shell 2.JavaAPI操作 2.1.HBaseAdmin类 2.2.HBaseConfiguration类 2.3.HTableDescr ...

  9. 什么是Zookeeper,Zookeeper的作用是什么,在Hadoop及hbase中具体作用是什么

    原文链接 什么是Zookeeper,Zookeeper的作用是什么,它与NameNode及HMaster如何协作?在没有接触Zookeeper的同学,或许会有这些疑问.这里给大家总结一下. 一.什么是 ...

最新文章

  1. linux下ip冲突检测 arp
  2. python3精要(7)-集合,集合运算,集合解析
  3. oracle xml中cdata,XML CDATA的作用
  4. 2021牛客OI赛前集训营-交替【生成函数】
  5. 【数据结构笔记45】通过中间步骤区分简单插入排序和归并排序
  6. 一行 Python 代码,20款经典小游戏
  7. 2022电商人必备的7大工具推荐
  8. 中国大数据风控企业揭秘系列之航天信息
  9. php中fastcgi和php-fpm是什么
  10. Recovered from a route's Handler('github.com/kataras/iris/mvc.(*ControllerActivator).handlerOf.func2
  11. 苹果服务器 显示器,苹果M1芯片的Mac可以外接什么显示器 显示器最高支持多少分辨率...
  12. 【笔记整理】通信原理第九章复习——线性分组码
  13. centos 中 Discuz 论坛模板配置问题
  14. python打字测速_【pygame游戏编程】第四篇-----打字测速游戏
  15. 业聚医疗在港交所上市:市值约76亿港元,钱永勋、刘桂祯夫妇控股
  16. 语法分析--自上而下分析的基本问题
  17. MarkDown编辑器 - MarkText使用文档
  18. 嘚吧嘚java的发展历史
  19. 美国大学计算机专业排名2014,2013-2014USNews美国大学计算机工程专业研究生排名...
  20. 免费好用的oa系统有哪些?盘点这几款!

热门文章

  1. 蓝绿发布、滚动发布、灰度发布(金丝雀发布)、A/B测试
  2. Material design - 图标(二)
  3. 鸿蒙渊boss,副本介绍-云光殿
  4. python判断回文序列_Python针对给定字符串求解所有子序列是否为回文序列的方法...
  5. 织梦装修网站设计师与案例相关联的数据调用教程
  6. 初学者对爬虫的一些基本的理解
  7. python智能写诗的程序_百度AI攻略:智能写诗
  8. 苹果怎么删除通讯录联系人_通讯录删除的号码怎么找回?苹果手机恢复方法
  9. 微信最强升级,这次一定要更新,不然烦死你
  10. 常州市住房公积金管理中心:美创防水坝守护数据安全