00:00
好,我们来去看一下the k的Java客户端,那么the k Java客户端呢,客户端呢主要是有三款,一个是官方。官方提供的Java客户端,那么然后呢,有第三方给咱提供的VC以及K啊这三款。那么这三款呢,都比较流行,那官方提供更用说了,有官方自配书嘛,那么ZK肯特啊,它是一个小的开源社区开源的,那么但是呢。呃,他对官方客户端的底层做了很多优化啊,一些问题呢啊给咱解决了啊这呢,而且呢,会比较简单一点。那么K啊,他呢,其实做了很多高级封装,比如说呢,分不是锁,他已经给他实现好了,我们直接去玩就可以了。那么它有点类似于red,没有reding,它已经在实现好分布式层了,我们就不用在意什么时间了啊,那么K啊,就是这样的一个东西。好,那我们这三个客户端。如果你想原汁原味的来去玩的话,那你可以使用这个官方提供的啊。
01:04
那么如果你想玩起来稍微舒服一点,那你可以选择ZK clean,那么很多框架底层啊,哎,它就使用ZK,比如说呢,我们嗯都听说过啊,大报这样的一个微服务框架,那么大的微这个微服框架底层啊,它就使用可的。那再比如说呢,有个消息中间件也比较火啊,叫卡夫卡,那么它的底层呢,也使用ZK林的。那么K呢啊,它的这个封装啊,相对来说呢,会比较完善一点,功能呢会更加强大一点。啊,那么很多应用类的公司呀,哎,他们喜欢使用这个K,因为呢,很多东西都已经封装好了,我直接去用就可以了。那么咱们在课堂上啊,我们主要是使用这个官方客户端和这个key,我们现在是用官方客户端手动去实现一个分布。那么后续呢,咱们再去玩一下K,给他封装好了分布式锁。好,那么咱们呢,废话不多说,你就直接呢去写代码啊,先去看一下官方客户端是怎么去玩的。
02:06
啊,那么啊,它的语法啊,A让咱你回顾一下。那么然后呢,我们再去基于这些API啊,来去实现我们的分布热算啊。好,我们来打开我们的案例工程,在案例工程里面,你首先可能引入the keep相关的一些依赖,好我们呢,随便找一个地方来去引入一下,来一个底depend词啊,来一个the keep。那么这样的话呢,我就引入下3.7.0这个版本的了啊,当前呢,我的仓库里面最新的就是3.7.0,后来去导入一下。那么导入好之后呀,我们再来去,呃,看一下啊,咱们这个代码该怎么去写啊。那我们来去,嗯,创建一个类,那这个类呢,把它放在ZK这个包下面,我就命名为那是ZK,那是test这个类。因为这类里面呢,我们可以去写一个慢方法来去玩一下,咱们有K的这个API啊。
03:02
那么首先我们得要初始化一个官方客户端,那么怎么初始化一个官方客户端呢?我们这里利用一个,那么可报对象就可以了啊,哎,他呢就是官方客户端了啊。那么通过它,我们可以完成所有的一切操作。那我们来去六一个,那么六的过程中呢,我们就去设置一些参数啊,那它里面参数呢,主要是有连接走侧参数,那么要设置一下呃,会话的超时时间,那么以及呢,咱们监听你可以去设置一下。那么首先呢,第一个参数连接字符串,那么连接字符串该怎么去写啊,我们可以呢去看一下啊,它的这个里面有没有说明啊。但它有说明,它这呢,你可以逗号进行分隔啊,里面的格式呀是什么是地址加断母号的形式,但他给咱举了一个例子啊,这个例子呢,是本基地址对吧?啊加上端口号以逗号进行分隔啊,逗号后面呢是不能有空格的啊。OK,那我们这的话呢,咱只有一个服务啊,那我这里呢,就只写一个地址就可以了,那我可以写上这个幺七二点幺七二点幺六点幺幺六点一百。
04:12
那么再跟上端口号,那我使的是默认端口号2181这个端口号。那么然后呢,超出时间啊,比如说呢,我可以搞一个30秒的超出时间。啊,它单位呢是什么呢?是秒还是毫秒呢?它这里有说明啊,也是毫秒值,那所以的话呢,我这里啊就写了一个嗯,3万啊3万代表是30秒。那么然后第三个参数,它需要可能需要一个监听器,那么这个监听器啊,它其实是一个接口啊,那我们呢,可以去去直接用这个接口就可以了,咱可以使用匿名内部类的形式。啊,来句初始化,这里一个watch对象。好,那么在这个卧底对象里面呢,我们就讲样一个监听啊监听,这个监听呢,咱先不管它啊,我们先空在这个地方,那最终返回的就是一个走替跑对象了。
05:01
那么有异常怎么办呢?那我们呢可以来一个TRY啊TRY,咱们呢可以来一个try catch,然后是finally啊。那么在finally里面我们可以干嘛呢?可以去关闭咱组提报链接。那怎么关闭呢?我们首先呢,得了一个ZK,如果你不为空对吧,不为空,咱可以把这个东西呢,给它提取到外面去啊,给提取到那么上面这个位置。那么等于,那么那那么在这个地方呢,给它啊赋值一下啊,等于它。那么最终呢,我在这个地方呢,可以去判通一下,如果不为空啊,如果不为空。啊,这应该是那个走K客户端,如果不为空好,我们呢,给这个走keep客户端啊进行关闭啊就可以了。啊,一旦出现异常了,你就关闭走keep链接,那如果我这个方法执行完了,那我也要去关闭这个people链接,那么这个有异常怎么办呢?可以去抛一下吧。
06:04
啊,那么在这个获取链接啊,啊就已经搞定了啊,那么在这个监听里面,我们可以通过监听啊,去看看有没有回到链接。那比如说我可以在这个地方拿去输出一句话啊,输出一句话,哎,获取获取链接链接了吗?对吧,咱可以去打印一下。那么要注意了啊,要注意了,那后续的话呢,我要通过这个走客关。那么做一些操作啊啊,来一个呢,来一个啊K那么点上,哎,我可以呢,进行create创建节点。那我也可以呢,通过这个意思来判断某一个节点是否存在,那我也可以呢,去获取某一个节点的这个子节点以及它的数据啊啊,通过这个客户端就可以获取了。但是要注意什么东西呢?啊,当我这里获取链接的时候,那么这个地方呢,可能就已经在执行了。这应该执行了。好,我们可以去试一下,比如在这里打印一句话啊,好这的话呢,呃是一顿啊一定操作,我可能还没混淆链接呢,那这个地方你可能就已经在执行了,那么此时在那个keep跑。
07:13
这个客户端它会怎么样,它应该是为空的啊。好,我们来进行一下啊,看看这个具体效果怎么样,好,那么在我们这个项目启动过程中啊,那我们可以发现啊,首先呢,第一个问题啊,就是萨拉后街报错了。他说,Plus pass中包含了多个三佛地的绑定,就引入了多次三轮佛地的依赖啊。因为说呢,有其他依赖引用萨拉Ford,那么the keep的话又引用了一次,它就会出现这种多种啊,多种依赖绑定啊,那后续的话呢,可以在keep里面把萨拉放机的这个依赖给它排除掉就可以了。就可以解决了。那么在后续的话呢,这个日志过日志打印过程中啊,一顿操作先发生了。那么然后呢,才是获取链接了吗?那最后呢,又获取了链接了吗?
08:00
对吧,那么这是一个问题,就是我这个链接可能还没获取到呢,那这一顿操作就已经先发生了。那么这条会用链接了吗?它打印了两次,为什么打印两次呢?是因为我们获取链接的时候,那么咱们这个时间呢,它可以接听到。那我们关闭连接的时候,它也可以进听到啊。啊,那我怎么知道这是呃获取电极的监听呢,还是关闭电极的监听呢?那到时候我们要去解决一下啊,要去判断一下了。那咱先解决第一个问题,那么第一个问题呢,就是这个萨拉forty的这个日志呀,它引用了多次啊,咱可以把the keep里面这个呢表开除,不要咱们可以通过这个explos,然后是explosion。那么然后呢,我们再去找一下咱们那个萨拉破D的依赖啊,萨拉姆破D啊,就这个依赖啊,咱可以呢,把这个坐标直接拷贝到我们这个排除的坐标里面去啊,再把这个呢给它删掉就可以了啊好,那么第一个问题呢,我们就已就已经解决了。那么让第二个问题啊,就可呢,就是咱们这个一啊连接啊,可能还没有获取到呢,那么一定操作呢,先放生先发生了啊,那我这一定操作肯定要用到这样的一个对象,那么此时的链接还没有连接上的。
09:12
那我就开始去用它了,那肯定会出问题。那么所以呢,我们得要等它链接获取到了我这里呢,才能发生一这个操作啊,那要怎么做呢,我们就可以使用咱们这个闭锁功能。那毕功能啊啊,就是咱们前面演示那个坑当拉那玩意啊,我可以设置一个数值是一。这数之一,那么然后呢,当我获取到链接之后呀,我这个地方呢,可以来一个T,当点上wait。啊,点下这个康大对吧,点下康就可以进行减一。那么减为零的时候,那我这个外可以放平。那我可以在这个地方呢,它一个外,如果你没有减为零了,我在这个地方的一直阻塞,这当你互相链接了,减为零了,那我这个地方呢,才会去放行啊。
10:00
OK,那么然后呢,我这获取链接的时候,它会走这个监听,那么咱关闭链接的时候也会走这个监听,那我是关闭的链接监听呢,还是获取了监听呢?那咱们可以呢,打一下这个事件,来去看一下这是一个什么事件。那我怎么区分这是获取电极的时间呢,还是呃,还是这个关闭电极的时间呢,它在这个对象里面肯定是有一个有一个维度或者有一个参数啊,是可以获取到的啊。好,那我们来去执行一下,再去测试,看最终效果怎么样。那么此时呢,呃,我们这个也已经没有那个萨登佛经那个警告了啊。那么然后呢,在执行过程中,那他肯定是先获取链接了嘛。对吧,先会这个监听啊,会了链接了吗?会了链接之后呀,它是一个操作啊。那么操作完了关闭的时候也又获取链接了吗?这个监听呢,执行了两次说明啊。
11:00
那么这两个监听执行了两次,但是两次这个里边的对象,这个打印的效果呀,啊,是不太一样的啊。因为我们有一个T这么一个玩意儿,就是状态这个玩意。那么这个玩意呢,呃,一个呢是close的,一个是think,然后呢,Think的就是获取链接的啊。好,那么如果你是这个状态的话。那我代表呢,是货连接了,那么如果你这个状态的话呢,说明还能说明你是关闭连接了啊。好,那我们就可以呢,基于咱们这个来去判断。那么在event里面啊,Event里面它是有这样的一个4T这么一个玩意的啊。塞这个玩意的,那最终返回呢,就这样的一个啊。那么这个嗯是什么类型的,我们可以判断一下,而我们有这样的一个枚举类,叫keep sta的枚菌类,它里面呢,啊,就有各种啊状态,也有closer这个状态,有think,呃,Think connect这个状态啊。
12:02
那么如果你的状态等于这个状态的话。啊,你的这个状态,这个状态等于这个状态的话啊,那又说明啥呢?说明咱是获取链接的一个状态啊。啊,后续连接状态,那你可以来一个呃,点上equals,但是开。那么在典型的是if判断,让他把我们这个东西呢放进去。如果我们这呢,获取到链接了。获取到链接了啊,那就可以呢,去放行了,来放荡放行,那么这样的话呢,我这个地方呢,就可以去执行一定操作了啊。一定操作了,这他应该是获取到链接了啊,咱们给打印是获取到链接了,改一下啊,这是啊获取到那么链接。链接了,好来去打一下这个已半的图像。那么同时的话呢,咱们还可以来一个II衣在这个里面呢,我们也可以去判断一下你是不是这个closed,如果你是close的这样的一个状态的话啊,这样的状态的话。
13:11
那我们。那就可以呢,也输出一下吧,对吧,来一个equals啊,然后是4TITLE。那我们在这个地方可以去输出一下。来一个输出,然后呢,是关闭链接了啊,关闭链接好我们就已经写好了,那么下之后呢,我们可以去执行这个测试,来看这个最终效果怎么样。那么首先呢,呃,它肯定会打印这个获益的链接了,然后打印这个已完成对象啊。那么然后开始执行移动操作,一定操作执行完了,我们关闭链接,它会打印这个关闭链接啊来看一下你是先获取到链接了。那么然后打印这个里面的对象,然后是一次性操作,那最后的话呢,是关闭链接,好那么这个keep客户端,那么获取链接,关闭链接你就已经搞定了啊。
我来说两句