00:00
好,同学们,接下来我们呢,就要完成我们的MYSQL。通过开。向同步数据完成我们的双写一致性,那么接下来我们来看一下第一个这个案例,它的来源和出处,我们前面说过了,这个东东是阿里开源的,那么他这块呢,做的也非常不错啊,还是比较主流的一个同步工具了,那么来同学们。你说我现在要学这个,我不会,我的入口是什么呢?那首先啊。这个仓库会搜吧,第二个是不是这有个wiki,那么他呢,就是一个我们的自学的目录,最经典的是不是quick star,好,那么来同学们理论知识全部说完了,接下来大家请看他。这就有开Java客户端,OK,直接告诉你了我们这个案例。从哪儿下?
01:00
怎么写?你看这是不是每,然后告诉你如何创建每本的标准工程,修改po沫,添加依赖,甚至什么client端的sample代码都给你写明白了,OK,那所以说严格的案例也参考了阿里官网上的DEMO,在他这个基础上我又做了一点点小小的修改,那基本上也是我在工作中。也用这套代码呢,能够顺利的完成MYSQL通过canl通知进行数据的变更,达到双写一致性,好,那么同学们请跟着我来完成我们对应的案例出处和落地实现。第一个。从哪来的?也就是我们的参考源,对吧?没有必要重复发明轮子,从时间、性能和你掌握的资源以及上线的压力,也没有必要,也不可能什么东西都是从零到一来开发,我们站在巨人的肩膀上学习比我们更优秀的代码,然后进行二次开发,迅速上线,完成我们的工作,OK,好,那么同学们参考这个有兴趣呢,可以去读一下啊,那么我们呢?
02:15
第一步来进行我们MYQ的处理。首先我们目前是这样的,在这块我的MYSQL啊,为了给同学们一个区分度,我这边呢是Windows的。我们的red呢,我是装在sans上面,也就是我们的Linux上面,OK,那么故意实现两个不同的机器。故意实现两个不同的操作系统来给你证明,所以先搞定我们买色跳来。首先查看我们的MYSQL的版本,那么本次杨哥用的是MYSQL5.7,那么你的MYSQL版本,那么同学们请查一下。
03:03
来,OK,好,大于等于我这个版本就行了啊好,但是啊,呃,目前而言5.7是比较稳健的,但是有些同学可能用八了,那么这个时候呢,也是可以的,那么你照着做啊,问题也不大。第二个问题呢,请看一下当前主机的二进制日志,那么这个命令我们老熟悉了,Show master status,那么来同学们,这是我们第二个命令。那是干什么呢?那么请看一下它的赛名字是八五,那么position现在有点类似于这个偏移量一样,是13117,那么后续如果我们MYQ动了,那么这个位文件和这个位置有可能会发生改变,尤其是这个position OK,好。接下来我们就要查看一下你当前是否开放这个权限,就是有点类似于这样啊,你是否开放你的领空,让别人来进行访问。
04:02
OK,你,你不能说随随便便就看到了我MYSQ的核心机密吧,所以呢,第一个同学们请注意,默认这个log病它的值是off关闭的,因为MYQ重要的是稳健和安全,你不能随随便便的一个人都可来访问我的数据吧,OK,那么好,大家呢,执行一下。来,由于之前我已经做过多次的讲解和实验,那么严格,这早就已经打开了,那么你如果是首次,这应该是个off,这个关系不大好。那么接下来我们要开启MYS并log的写入功能,就是开放权限,那么怎么办呢?那么这个啊,是我本机我自己安装的目录结构,那么你的MYSQL装在哪?以你的实际情况为准,首先找到我们的卖点ini,注意任何改配置这样的文件请一定先备份好,备份完了以后放心大胆的干,那么接下来我要改一些什么呢?那同学们请看。
05:06
你只需要在MYCQD这个栏目里面添加这三行,直接拷贝。粘过去就行了,好同学们那有点类似于啊,我呢。拷贝这三行一粘贴,以前我们都做过了啊,搁到这,把这一段一粘贴,就在MYQD这个命令行的选项下面粘贴这段就行了,那么这个是个什么意思呢?第一个。开不开启,我们要开启第二个server ID,一般主机master我们配个一,你不要和can的这个replication这个从句,这个silver ID重复了那么一句话了,就是你只要master你就配一。看到从。二以后开始OK,好,关键是这个b log for me含,那这是啥意思呢?一般我们也都配这个啊,这个你不用去改啊,这个都是我们生产验证过的,请同学们直接用这个就行。它这个呢有三种模式绕这个模式呢是蛤蟆,除了记录SQL语句之外,还会记录每个字段的变化情况,能够清楚的记录每行数据的变化历史,但会照用较多的空间,没关系,现在内存硬盘空间都是小问题,主要是文件性能好,那么还有其其他两种,我们呢,仅做参考,就不再过多的介绍,好,这是我们的第四步,那么接下来重启。
06:35
MYQL,因为你改了这个配置文件啊,杨哥这是已经粘过粘好了,我就不再废话了,那么下面怎么重启配置文件,同学们,Ini,这个配置文件粘完了。再次查看的时候,那么同学们这一定要是二说明打开成功,你才可以继续做后面的实验,然后接下来授权成功以后,你还得告诉外面就是我们的kind,你用什么样的用户名和密码可以访问我的买色条,我现在给你开通了这个权限,听懂了吗?那就代表哎,你可以进我这个门了,那你进我这个门是不是我要给你配一把钥匙啊,所以呢,我们要授权开了连接我们的买。
07:17
来,首先MYSQL默认的用户通通在MYSQL库里面的user表里面啊,那么同学们查看一下,就说你现在哪些人可以访问你这个MYSQL在这儿MYSQL有一份底单,我在MYSQL库里面,比如我们这个库啊,他天生默认安装的,好吧,我们告诉你最经典的是不是有root用户啊,对不对?那么来来,请看我们这。有一个开了,那是我以前见的那么好,你首次见面应该这行记录是没有的,你查询一下目前你root用户,那么他有哪些权限,有没有开放等等,OK,你应该有个root啊,否则很神奇,要不然你怎么访问这些数据库,那么接下来我干嘛呢?
08:02
默认呢,是不应该有开有账户,此处新建加授权,所以呢,同学们我们呢直接。执行这段命令很经典啊,那么如果说存在这个了,我我要给大家做一下全新的演示,我先把它删掉,和大家一样,然后创建用户,用户名叫can,密码叫然后grant,什么意思,是不是全部授权给这个用户啊,完了以后,因为也就说到最后啊,增上改这种权限通通给这参种用户啊,因为所有写操作权限你都给,那么写操作权限都给了,哎,这个读操作权限也可以了,所以说我们这儿呢,就图省事,全部授权。然后flash privilege刷新一下目的权限,然后再来查看一下啊好,那么同学们先删掉,我们现在来查一下怎么样,没有这个开了吧,那么应该和大家一样啊对不对,然后呢,整体执行一下,新建又查出来,那么到此为止,我们的MYSQL测OK,那么也就是。
09:07
两步开启了二进制文件,第二个新建账户开且给他分配权限,让他可以访问买色Q,以便读取我这边的改动,那么所以说右边这只目前完成OK,通过上一讲MYSQL最右侧搞定,那么接下来是不是要看看我这个监听者开它如何下载安装启动啊,那么自然而然后台也应该有一个服务叫开默默的监听。监控着我们的MYSQL数据变动,并上行下达传递给我们的Linux上面的red服务器,好,那么接下来这个开这个服务该如何启动呢?五步下载、解压、配置、启动、查看,那同学们全流程走下来,保证你打通一波流带走。
10:06
个地址如下,首先啊,我们本次用的是一个稳定的一个版本,1.1.6好了,那么。功能新增重要优化,有兴趣的同学自己去看看,那么接下来我们在这儿呢,主要是在它这个下载。Asset资产里面来进行下载,那么请同学们跟我保持一致,我们下载跟开发人员相关的这个东东,常用的就是这两个啊,这个是一个这个类似于springin的那样一个前台的监控程序啊,当然我们Java程序员嘛,一般来命令说话,所以呢,我们用这个除命令操作后台处理就行来,那么同学们。AUGUST11,那么请下载2022年8月11号发布这个版本啊,以前的你不要下了,因为它有bug,它在这给它修复了,好,这是第一步下载,我就不再废话,我已经提前下好节约时间,那么第二个解压,那么我们呢,解压后整体放入到我们的麦开的路径下面啊,就是在这儿,那么同学们,那么按照杨哥的这个习惯啊,我做什么工作的话呢,都喜欢先建一个make DR对吧,这些命令就不说了吧。
11:16
卖叉叉叉,然后呢,专门在这个路径下面建,然后我们从官网上下载的这个直接上传到这好吧,那么第二步解压。那么看到好了,那么同学们解压成功,那么搁到这,我们呢,就只剩下这个这个这个这个这个OK,我待会呢可以把它删掉,删不删无所谓了,我就是没讲以大家现在对Linux的经验。和我们配置的认知也应该明白,这个嘛,命令相关这个嘛,配置文件相关,这个呢,它依赖的加,包括因为它也是用Java开发的日志啊和功能增强的插件,OK,好,这是我们的第二步。
12:03
下载解压第三个配置,那么好了,第一个在Linux的这个康复example案例这上面有个instance property,也就是类似于在这个路径下面。像我们的微服务的property配置文件一样,那么好配置什么呢?要换成自己买色Q主机的master IP地址,好了,那来了,也就是告诉我这个can,你现在要去监控监听谁?那么是不是要去知道MYSQ你安装的IP地址啊?好了,同学们搁到这,我们的CD看复下面example o了,在这个路径下面,大家请看是不是有个instance property,那么we are打开好了,那么同学们在这。我们前面说过了,看red MySQL,那么肯定是装在不同的机器上,对吧,所以说呢,在这块那么切记啊,你要保证你的这个Linux可以成功的连接到你的MYSQ安卓一台机器上面,那么192.168.111.1,这是杨哥的。
13:17
Windows。对应的MYSQL安装的IP地址,那么你自己是什么?你改成你的,OK,好,肯定跟我不一样,再次强调,那么第二步换成自己在MYSQL上新建的开头账户,那么我们又默认的。用户名密码kind kind OK,所以说在这表面上要求改三个,这个呢是肯定要改master主机MY的IP地址和端口,那么接下来我们用,由于我们用了默认看channel,这个呢,我们就不再修改,好保存退出我们的第三步完成不难吧,接下来改完以后是要启动。那么不废话,自然而然回退到我们的上一级目录这个病下面,那么这个时候大家请看,是不是就有我们买看的这个文件夹下面有个B,大家请看。
14:17
不用我解释了吧,所以呢,来start up第2SH2跟Linux线相关的,OK,我们来这个呢,就是告诉你启动加载的class这些,并它自己带着力包下面,以及需要我们JAVA8相关的支持等等,OK,这是我们的启动命令,很简单start up.sh啊,当然了,前提是你Linux上面要安装好JAVA8的环境啊,这个呢就提一嘴,因为我们之前讲Linux的时候是。默认啊,各位亲,你们都有这个Linux下面安装好JAVA8了,OK,那么第四步启动好了,最后一步查看,那么你这个有没有启动成功呢?下面请看server这个日志啊。
15:03
在logs下面的can这个下面查看can.log如果能看到这句话,说明你的can服务器成功启动好,那么同学们,我们来看一眼,看到这在这个路径下面有这么一个什么,开进去来吧,大家请看这是不是有个can.log那么cat can.log大家请看是不是有the can server is running now,那么成功运行启动好,第二个请大家退出来,这除了开头这个文件下面还有个example,那么进去在这个路径下面,大家请看是不是有example.log,那么好,我们cat example就是它默认的案例这个log。来,同学们这句话应该明白吧,这个单词大家最熟悉吧,OK,那么所以说如果你执行了我们的启动命令,在我们对应的这两个日志路径下面查看这两个。
16:04
日志服务器日志正在运行中。我们的样本案例这个。Start successful。那证明你。完完全全放心,Canon启动成功,那么完成了我们的第二步开也已经给你提起来了,那么接下来是不是要开监控MYSQL,一旦有变动,迅速往red里面写数据啊,好,那么同学们,接下来就是我们can的客户端。接下来就最后一步看到客户端的编写,也就是我们的微服务Java程序的编写。在这MYSQL搞定,开后台服务监听捕捉数据的程序搞定,那接下来是不是要把开收集到MYSQL变更的写操作数据通过我们的Java程序回写进我们的re,达到两边的双写一致性,OK,那么所以说接下来要解决这一段Java代码的问题,走回到我们的脑图第一步SQL脚本,那么你是不是要给我一个MYSQL的数据源,我要监控哪一个数据库下面的哪一些表,那么所以说我们这请你自己为准啊,随便选个库,然后呢,建这么一张表,表你都可以随便建啊,我这只是举个样本案例,那么来同学们,这个库下面杨哥建了这么一张表,然后一查询。
17:24
OK,那么接下来只要我MYSQL测有正常的增删改写操作,那么MYSQL动了将会被canon后台捕捉到,然后迅速写回red,那接下来数据源SQL脚本买SQL册搞定。回到我们的Java程序,那么又是键微服务mode的无步键mode改po沫,写亚主启动页不对,同学们走第一步,建mod开代姆零二不演示了,瞄懂第二个改泡沫,那么来同学们,现在这是我们新建好的一个泡沫的原始工程,那么有了泡沫以后,我们是不是要引入can的架包,那它怎么引呢?回到我们这说过了,一言不合就看wiki是GI up上面针对于某一个中间键开源框架,Wiki是它的学习入口。
18:16
那么往下找找找找找同学们。搁到这,我们可以看到多语言支持,这有一个开Java客户端,那么我们的参考案例,我们的改写思想均来自于这一个阿里官方的源码。那么来同学们首先就告诉你从头开始创建工程依赖就这么一个动作,OK,然后美文的标准工程,你要用命令,或者是你用什么idea都可以。那么接下来是不是client sample这么一个代码,好,这个代码我们待会说,所以呢,我们的知识也是均来自于最权威的官网,同学们可以放心服用,来吧。那么接下来杨哥呢,给大家整理好,由于它牵扯到数据库,那么可能需要粘贴德鲁伊相关的代码,那么来同学们,我们按照我们以前的项目找一下,如果没有出来的同学说过了。
19:06
刷新一下,OK,下面把对应的架包从每本下载到自己的本地库来我们的微服务,然后完了以后大家请看,就引入了这么一个动作,其他都是我们以前讲过的spring BOO跟red的整合,对吧?丝袜哥,然后呢,包括我们的数据库驱动,MYSQ的和德鲁伊的集成,这些之前呢都说过,不断废话,这是我们的第二步改泡沫,那么第三步是不是斜亚么application.property那么来吧,那么同学们。搁到这儿,还是和以前一样,还是熟悉的配方,还是熟悉的会道vacation。Property。好,那么同学们看到这主线,这个是你自己master MySQL的IP地址,比如说我现在装在Windows上面啊,所以说是local host,第二个你自己的库,用户名密码,不废话,每一次都有同学犯这种错误啊,一粘了以后跑不通又跑来问我,所以我每次都强调希望大家不要问我这样的问题了,好,这是你自己的地址啊,端口号和数据库的名字。
20:26
这是我们的第三步,第四一步是不是我们的主启动类那么老规矩,那么同学们呢,都清楚啊,在这块我们呢是一个跑起来没本监听程序,你呢也不用给它启动,那么com.at归谷点开到点二,那么就是这好,那么来spring application my。这个呢大家呢都懂,但是呢,这波程序我们并不需要启动我们的为服务,它只是一个普通的架包程序,直接在后台启动就行了,所以说我们这只是按照微服务建构的步骤,我们也把它写完,因为你后续可能要在这个基础上修改,也可以继续复用,但我们这暂时不用启动,把这个注掉好,这是我们的第四步,那么最后一步环境整体都搭建好了,那么来吧,我们呢要有两个,本次我们来看一下。
21:25
它的代码。那么基于它后面这个代码,我们待会图还会解读啊,我们要写两个东西,第一个red,那么我们本次啊,连接red客服端,我们用我们之前讲过的GIOK,所以搁到这儿,那么同学们我们呢,来处理这么一个东道啊。先新建一个U,好,然后这个代码同学们直接过来。来就是一个工具类,那么同学们log引入我们的包,好,它是这样的啊,这个我们red服务器的地址,这个我们red密码,我们呢用一个解edit po以前就跟数据库连接池一样,线程池一样,每个解edit的连接客户端我们放在磁化基础里面,这很简单,就是一些配置和静态代码块,那么解edit的连接池的配置,这个配置我们就写了它的一些连接参数,然后地址red的端口号时接,然后red的密码,然后这提供一个get接,那么在这个池子里面就新建好了一大堆JS的客户端连接,如果这个池子不等于空,我们返回我们的JOK,就像是从线程池里面拿到一个建好的线程,数据库连接池里面拿一个建好的连接一样,OK,这个只是个工具类,好了,不是重点,那么接下来。
22:58
这个就是我们的重点了,那么这个呢,给大家呢,详细的说一下啊来吧,那么这是我们的业务类,搁到这干嘛呢?它就是我们的开的客户端程序。
23:14
80%的代代码均来自于阿里巴巴的这个代官网,杨哥在他的基础上做了一下修改,那么好,同学们,我们呢,不废话,直接搁到这儿过来。来。OK,好了。怎么样,很多吧,当然不用着急啊,待会儿呢,我们呢直接呢逐行解读,给同学们呢讲解清楚。好了,来,那么同学们。关闭关闭关闭啊,你先不要管我写个什么,我们先看程序的整体架构。
24:01
五个三三改,是不是三大写操作,然后这是打印后台的实体,那么注意。真真正正启动的只有它,OK好了,那么同学们,我们呢,不废话,待会儿我会挨个读行的带着大家解读一下我们写的是个什么东东,那么现在不管怎么说,先给大家演示一下我们的案例效果,然后再进行程序的讲解和解读,好了,那么同学们,这是个main方法对吧?那么下面呢,老。回到我们的。现在RA是成功启动的,大家请看,这有K1K22个K,没问题吧,两条记录好了,现在程序已经写完,我们呢,先运行我们这个后台程序,好,同学们保证你的啊,网络是打通的,你自己的Windows可以通过网络连到我们的Linux,好,我们来吧,同学们给它启动,大家请看啊,那么现在看到没有办法开始监听MYSQL的变化,好,这是它初步的第一次监听,跟我们的MYSQL同步,知道了MYSQL的什么,是不是二进制并log这个文件目前是哪一个文件,它的位标志位是多少?好了,那么接下来请看我们后台故意写,我是开每秒一次,正在监听,这是我们的监听流水号啊,保证给大家演示,那接下来不废话。
25:41
搁到这儿了,以后同学们我们呢,是不是新建一个,比如说这个时候就是我们的西游记,OK,好了,保存,请大家看我现在是不是新增了一条记录,请看我的后台,咱们现在先看这个效果是什么,你的事件类型是什么啊?Insert ID是16 update成功。
26:06
每个字段是什么东东?好,MY有了这后台也告诉你监听了,我关心的是我们的red有没有?同学们请看这是不是有个ID16,那么GET16,大家请看ID16USERNAME西游记没问题吧,所以打完收工,OK,好,这是新增,那么修改呢?假设现在修改为。三国志好,同学们保存,大家请看。下面的操作捕捉到事件是什么?东道是不是update更新啊?那么此时不废话,回到我们的16是不是从西游记变更为我们的三国志了,没问题吧,所以说这个第二个操作过,那么第三个将我们的16号记录进行删除,来同学们后台大家请看有没有捕捉到delete这个操作OK了吧?那么此时同学们我们再看一下16有没有那么kiss欣。
27:10
我们的16号记录三国志,刚才这条是不是彻底被我们删除了?同学们现在整个流程打通,是不是通过开MYSQL动脑监听到它的二进制日志文件,迅速通过我们的程序也会进我们的red啊,OK,实验效果完美,接下来我们就要进行一下后续原理和代码的讲解,好,我们同学们请把这个案例放到你自己的代码库里面,也许日后用得到。OK,我们继续回到我们的代码。通过上一讲我们成功的实现了只要买CQL测发生了对应的新增、修改、删除相关的写操作,也就是说MYSQL有变动,那么我们的后台开程序能够立刻监听捕捉到对应的MYSQL相关的变化,也就是MYSQL的什么并log二进制文件的变化一样画葫芦照葫芦画瓢的通过我们的Java程序能够成功的作用到我们的red实现对应的回写,达成了两边的缓存双写一致性,保证了MYSQL变动立刻red实现回血,尽量的满足两边的实时性和数据一致性要求,效果达到给大家成功演示。那么接下来我们呢,就要回到我们的Java程序,给大家解读一下它是如何通过代码来实现的对应的技术学习,我们又应该注意哪些细则,好来大家看。
28:42
看一下这是刚才我们作用的程序,123455个方法,好。本着避免重复发发明轮子的这种情况,尽量的复用官网的案例,它是最标准,最正确,最官方的,那么来吧,同学们看一下阿里巴巴对外公开。
29:01
对应的DEMO。首先,业务类。没有方法100%一切程序的入口,OK,我们就是美甲也应该大概了解,那一定是对TEL要做个连接,类似我们GDBC。第二个print entry,那么第三个print column,那么这个column是private私有,一定是内内部调用,没有公开,所以说大家请看这叫print column,万文知意也知道是打印出某个字段的名字啊,值啊,以及它是否更新成功对应的事。好,那么这个方法过简单而言,官网给我们暴露出来的没有方法是入口打印程序,也即它给你暴露的。我开了连接上。MYSQL监听成功,然后看到MYSQL的变化,会把我们的程序撸出来,然后打印出。我们MYSQL对应的变动,那么这些代码我们呢,负右直接拷贝,搁到这以后,突然发现那杨哥不对啊。
30:05
你这这两个阿里巴巴官方的这三个什么东东呢,那么一样的,我们呢,也参考阿里对外暴露的Java代码,实现了我们自己功能的改进和演化,那么一句话,没有办法,程序入口这个是。开了打印到我们MYSQL对应的变更。那么自然而然可以在后台。Idea的后台打印的话,那么自然而然能够打印,是不是说明能够捕捉,那么我们再做一次转手,把我们打印出的数据再回写进,实现了我们两边数据的一致性和平衡,那么来吧,同学们,这两个来自于官网,我就。避免反复的切换,咱们直接在idea里面说开始,首先同学们漏,我们的步骤呢,启动进来了,然后东西呢,就这么点connect。
31:02
是不是创建链接kind服务端的一个连接connection入口,那么有点类似我们GDBC,大家请看try final,点这块创建连接,中间这块进行业务逻辑finally,最后disconnect关闭一说你要懂,OK,好,那么同学们,下面我们来看一下第一步开的连接器,你有single connect点开看一下源码,阿里巴巴给你写的很清楚,创建单连接的客户端连接,那么在这块。就是我们的网络编程相当于要传进去一个socket连接的地址啊,目的地,用户名和密码对应做一下封装和超时相关的控制返回,我们获得开到连接,好,那么同学们继续那搁到这,按照这个构造方法,同学们请看,我们需要传四个参数,第一个参数。So,网络连接相应知道的地址,第二个我们的目的源,第三个用户名,第四个密码过,那接下来请看new,这个呢,就是我们Java所讲过的Java net网络编程所需要知道的主机和端口号点开,那么这个时候host nameme谁是不是就获得我们对应传进去的?你这台red装载什么一个地址,第二个启动这个socket编程。
32:26
检查check put,那么传进去一个没有被占用的端口号即可,那么在这块我们大家看一下我们的官网怎么写的,我照着葫芦画瓢,那么在这儿得到你的IP地址,也就是我们red地址,然后这是不是五个幺,我们相当于说这个socket启动的端口号,然后这个是一个sample,它的目的地,那么用户名和密码OK一样的。好,那接下来我们就要来看一个问题了,那好,杨哥,这个第一个参数听懂了,你也解读了,这个呢,就是soet的编程,第二个参数example,那么也就是我们官网上默认用的那第三个第四个用户名和密码,可是哎,没见你输kind的用户名和密码呀,那么大家想一下。
33:07
是空还是应该默认,还是第三种?杨哥傻叉,我忘写了,不是这样的,同学们别忘了,我们在这是不是有个VI instance property,也就是说在kind con example这个下面,OK,它会有一个配置文件,那么我们点开VI了以后,同学们请看我这是不是有个开默认的用户名和密码,Can开,所以说如果你不写,他就去读这个默认的配置文件,如果你写了,那么你的代码将会覆盖用你主人你自己所编写最新的这一波。OK,好,这是我们的第一个,说白了类似于GDBC获得can的连接器。好,接下来我们来每次批处理操作1000条。这个空弦空转的一个计数器,空的计数默认值初始值是零,你就把它记着,这就是一个什么计数器,从零开始啊,比如说我们每秒监听一次啊,每秒就加一次,加到多少实现程序的跳出,那么搁到这儿我们开始呢,监听MYSQ的变化,那么串二里面不就是我们的业务逻辑啦,来吧,同学们,这是不是开了我服务端的。
34:16
连接器获得connection来,你看129行,这杨哥把它给注释掉了。我们回到官网请看,哎,那杨哥你改官网上的源代码,人家是这么写,你干嘛把它注释呢?听好,这个connectorscript,我们前面说过是要发布订阅,默认它代表的是所有库的所有表。明白吧,这个就是一竹竿打死一船人,他监控的太多了,所以我们一定要在工作中使用自定义的标准干嘛?请看我把它注掉,用我们自己写的叫哪一个库下面的哪一张表,那么当然这是一个库一个表,那杨哥我想一个库下面多个表呢,100%应该有对应的配置,后面我们会说,正常情况下啊,你监控的越多,开的负担越重,它回血的时候就越慢,那么这个时候非常容易导致你的衰写一致性,出现数据不一致啊。所以从我个人经验使用而言,请不要用这个,这个是全部库的全部表,打击面太大,你的程序性能实际上生成了效果不好,我们只对重要的敏感和热点数据,有必要的再实现双写一致性,你不要所有库的所有表都干这么回事,程序性能一定会急剧下降,OK,好。
35:39
那么在这块我们呢,继续进行roll back,回滚一次,重新来来,请看total empty can,那么寄数我们这写个多少?60啥概念,回到这十乘60,那么是不是就600米啊,这个东西啊,没问题吧,也就是说我这个串啊,假设在这块几零零是不是小于我们的600。
36:07
秒招也就是十分钟,也就是说我这个监听程序啊,十分钟就结束了,那么当然如果你说杨哥我要一直监听,那么这是不是我要处啊,我们这就写一个十分钟,OK,比如说我们需要双写一致的时候就开启,不需要的时候,那么就如果到时跳出好,那么在这我是开。每秒一次正在监听,这是我们的监听流水号来了,Connect get without a还没有签收的获取指定数量的数据,那么同学们请看我们的单位是多少,一次批处理1000条,1000条,1000条差不多了,那么就看这个message get idea,然后呢,Message get ENT size来size,如果bench等于负一,或者这个size是零,就没有什么变动,那么下面请看这块怎么着,加个一计数器,也就相当于说我现在在这获得了这两个值是负一或者S是零,说明什么?MYCQ侧没有变到,没有写动作,所以我这看到只是默默的监听,并把我的监听次数往前加一个,你看这默认是多少,是不是零?假设一秒一次,一秒一次,一秒一次,OK,好了,那么假设。
37:26
到第100秒的时候,突然发现我买SQ有人动过了,这个ID和size不再是这个数,你们是不是就进来?好,只要进来了,计数器重新制个零,然后put ENT,就把这个message。获得的动道的这条记录打印出来,那么好,打印完了以后,假设我们这connect a c代表签收提交确认,当然如果你要写try catch的话,在这块是处理失败回滚数据,那么跟官网保持的是一样一样的,OK,好,那么同学们TRY这块的程序无非就是有动作我们呢就打印,没动作,间隔一秒一次我们就进行监听,直到有人开工了,计数器清零将其打印,那么只要能后台打印,我们是不是也就可以进行对应的回血进register。好,我们先把。
38:23
阿里对应的程序给大家说清楚,那么来,现在我要打印啊,假设就一条那么一条的话,来,请看这是不是一个负循环来吧。那么如果说刚好这个事件是事物的开始,或者是什么transaction事物的结束,那么continue结束到下一次,因为有可能事物提交他也认为是一种写动作,再继续进行我们的循环,那么进来,你看row change来吧。获取变更的road的这个数量,那么我们传过来这个ENT出,然后呢,存储的数据多少条try catch有问题报遗传没问题,继续往下走,先来看获得提交的变动类型,同学们请看,那么也就是我们的三大类型。
39:09
Insert delete塔,Update,然后就告诉你嘟嘟嘟嘟这一大堆动作,那么这大堆动道,那么大家请看,完全是照着阿里官网也是这么写的,听懂了吧?那杨哥这个打印出来是什么鬼呢?那么同学们来。就学内容b log就告诉你。文件的名字,它的偏移量,然后名字哪个库的哪张表,你的事件类型是什么,Insert。那么这个key是16操作是什么?Update更新有没有成功,成功了,那么你们的名字,我们西游记update是true,所以说这一大坨打印的就是刚才大家看到的这一行有没有变动,变动的话增删感写操作分别是什么?那么就获得了log的名字啊,然后呢,又获得了它的offet偏移量,然后呢表的名字啊。
40:03
这些等等,不再废话了,那么接下来我们来过来看,对这一行来进行拆分,好获得以后同学们请看啊,阿里的官网呢,是给我把它打印在后台,那么我跟阿里官网不一样的就是在这儿,严格的意思就说,如果解析到这个事件我们自己修改的啊,是insert的话,我们就写了个对red进行insert,如果是delete,我们就对red delete,剩下的三大写操作,那么是不是只剩update了?所以这三个都是一样的套路,那么来增删改走。再次强调,阿里只是打印我们自己,这三个是我们新增的,那么来了。这三个新增的我们干什么呢?过来这个呢,就是个杰森对象,然后丢过来。负循环,那么来吧,同学们请看我后台就打印出我们对应的值,要value和是否更新成功。那么大家请看这些动作没问题吧,好了,杰森直接呢,Put,然后如果这个column是大于零的话,我们来TRY。
41:12
Resource。Try with resource catch这样的自动关闭,那么理解了吧,在这是干什么?是不是通过我们的red u获得了个接Alice这样一个对red操作的客户端,那么sat就把这个K和这个value,也就是我们的这个结算串丢进去,所以我们能看到这个K是16,这个结算串丢进来,OK,好,那么同学们,这个就是我们的新增,那么同理。Delete也是一样,这个科拉姆就一条记录,也就是我们的这么一条记录就是个接算对象,那么这个对象接算先拼装put key value,然后如果这个column大于零,Sin大于零的话,说明有一条记录,干嘛解?
42:04
弄到这获得这个J对red操作的客户端,然后删除哪一个key。OK,完火,所以呢,在这儿对标的就是这个GET16,现在没有了,已经被删掉了,OK,那么也对应的增12,那么大家请看,如果我们进行了这个删除,哪个库的哪张表,你的事件是什么?是update还是delete?那么就做我们对应的删除操作,OK,好,那么接下来修改,如法炮制,拼一个结算串。然后呢,弄出来把它put进阶算串里面,然后解edit操作修改,那么还是一个set key和value打完收工,OK,那么这个就是我们对我们对应自己修改的对red增删改三大操作的一个进一步程序的优化,那么借助阿里的公开的源码,实现我们自己功能的扩展,完成两边的双写一致性,OK,那么请同学们有兴趣可以写一下我们对应的程序,那么没兴趣写的也可以,是吧,把这个代码呢粘过去,基本上能满足你工作中一般的双写一致性好那么感谢大家的聆听,那么接下来我们要说一点其他的内容。
43:28
通过前面的讲解,我们对我们的开程序如何监听MYSQL,实现red的回写做了详细和整体的介绍,逐行代码给大家解释清楚,阿里官网只有这两个,我们自己呢做了一下扩张,那么这段代码也很简单,无非就是获得连接。的客户端来进行对应的增删改的三大写操作,源码分析完毕,但是有两个小细节需要同学们注意,第一个官网上这行代码什么意思啊?订阅这这个政策表达是什么意思啊?第二个杨哥,你这为什么改成了这样一个东东?
44:13
好,你说是这个库下面的这个表,那我想是另外一个库的另外一个表,或者这个库下面的五张表,我有更细则的业务要求怎么办?这是第一个问题,第二个问题也是刚好刚才同学有对话框上问说杨哥你忘记关这个解X了,那么同学们都清楚啊,解我们之前也讲过了啊,首先我们这自己写了个工具类,这个也很简单,无非就是从解X连接池里面获得一个连接,以前我们在小白天讲的时候,怎么获得这个简压点,是不是自己溜一个,那么现在你不用你拗了,从这个池子里面直接获得一个,可是哎,那你用完了,按照我们的池化技术,你用完了是不是应该finally close关闭以后还给池子,然后接着来复用啊,对吧?那请问。
45:01
Try catch finally,没有啊,刚好同学们也问了,所以说呢,我们呢做一下对应的补充,第一个在Java程序下,这个订阅script配置的过滤正则表达式来,同学们它有这么一些情况,第一个叫全库全表这么写的,那么请问是不是跟我们官网上写的这样,就是阿里给了你的是一个全量啊。强烈不推荐大家这么干,全库全表,这样的话,第一个任何风吹草动你都要进行双写,那么你监控的越多,监听的越多,网络IO是不是越频繁,你带宽链路上跑的数据是不是越来越多,回写是不是频率也越来越高,非常容易导致双写失败,所以不要这么干,负担太重。第二个尽量的。精细化,你可以指定。指定某个库下面的全部的表,第三种就是单表,单库单表,第四种多规则组合,那么我需要是这个库下面的多少张表,这个库下面的具体的某一张表,这个库下面的具体的某一张表来进行写一个list。
46:19
监控清单,OK,好,同学们,这个就是我们的需要注意的细则,来,杨哥要是我没配呢?别忘了这个路径下面咱们是不是有这个配置文件,请看一下啊,如果你没配,或者你想排除。某一些不想监听的表。第一个默认人家给你的就是全库全表,你不配也是它,那当然你自定义了,是不是你主人,你所编写的程序就覆盖了我配置文件的默认出厂设置,这个是写进配置文件里面的,就可以不用在代码里面写,这是第一点。第二个table black什么意思啊,黑名单,那么意思就是说如果我配在这的,就是我不想监听的,比如说我的MYSQL库我就不想监听,那么在MYSQ数据库里面是不是有一个东西叫MYSQL库,听懂了吧,哪个库的哪些表我不想监听,就请把它写进黑名单,反向过滤明白,所以这个是白名单,这个是黑名单,所以它的入口有两套,要么程序。
47:26
指定,要么配置写死,OK,好,这是我们的第一个小知识点,那么第二个小知识点就是关闭资源的代码简写来,Try with resources示范资源,请问。这是啊,不是什么啊,同学,这不是JAVA8的新特性啊,你想起来很好,但是版本记错,是JAVA7就有了新特性,一句话,Java呢,也在不停的优化和优雅自己,大家都清楚try catch finally这种的老三样,对不对?业务逻辑异常,Finally要关闭资源都懂,但Java也在不停的进化,我能不能把我的代码看的优雅一些呢?所以在这。
48:04
请看,假期以后增加了try with resources这样的特性。它是生命。一个或多个资源的串语句,注意这句话意思就是说在串里面可以定义一个或多个变量,那么在这个里面定义的变量到最后。满足条件,它是不是实现自动finally close啊?这是一个新增的语法,弹一个语法简写的情况,那么一个资源就作为一个对象必须在程序结束之后就要关闭示范资源嘛。所以try with resources语句确保在于的最后每个资源都会被关闭,但有个前提,它要实现out closeable和IO下面的close able对象可才可以使用这个来实现异常处理和关闭资源。那么同学们请看我们这是J。接today,它继承了一个负类叫bary接我老爸在这儿请大家看最后是不是实现了close这么一个接口,OK,那么这个接口是不是自动的有close示范资源这么一种业务功能的描述,所以在这我们就可以实现这样的写法,Try with resources OK。好,我们同学们在这块就给大家大家做一下对应的说明和细则的加强。那么对于MYQ通过开通实现red的双写一致性的案例,我们就给大家介绍到这儿。
我来说两句