00:00
好,同学们,那么杨哥会尽量讲快一点哈,抓紧时间,我也知道大家呢,那个很辛苦了,好,那么接下来呢,我们呢,但是呢,还是请大家呢,这个呢,咬咬牙哈,今天我们加加班没关系,死不了好吧,杨哥也累,你们也累,那么。但是呢,所有的辉煌都是苦难的,那么也希望大家呢,干嘛呢,还是那句话,你们坐着听,我站着讲,你们累,杨哥更累,不废话,开工最后这么几个好,首先先说一下分发策略,这道题呢,到后续我回来以后,在项目里面再给大家串讲的时候,复习的时候我给大家讲,因为现在它有个分发策略,涉及到一些多线程的情况,那么我们在这儿演示的话,非常耗时间。说不清楚,需要同学们再做一下后面雷峰阳老师的项目了,以后我回来再带着大家做项目总结的时候,我再给大家说好,那么接下来我们先说重点的这三个哈。聊聊第五题。Active MQ的消息重试机制,那么注意重试。
01:04
不用我多废话吧,那么想想同学们,什么叫重试啊?哪些情况下会导致重试啊?好,那么同学们来讨论呢?OK,答到点上,但是这道题嘛,一个重试机制啊,它有一些连环套,又是跟前面那种题啊,现在这些大厂,这些面试官啊,抠细节和抠流程啊,和工程落地的经验细节啊特别多,那么大家来看看这种连珠炮的法本哈,好,请你谈谈activity MQ消息的重试机制啊,那么接下来他的问题是干嘛呢?那么。具体哪些情况会引发消息的重发?注意弟兄们,正常情况下是不是我们就是一次发一次烧,阅读以后就收工,那么再来。为了保证消息的高可用,如果你确认没有收到,我是不是只能是让你重重新消费,重复发送,那么请你说说如果你碰到的话,那么消息重发的时间间隔和重发次数分别是多少?时间是秒,十分钟。还是重发的时候有多少次啊,那假设OK,我要重试几次啊,是1万次100次还是738次啊。
02:07
好,再来有毒消息破一层A,谈谈你的理解。那么这个时候我相信干嘛?弟兄们分分钟你是不是崩溃了,那么所以说杨哥要给大家传承的是落地的工程经验,好,那么这呢,别着急啊,那么兄弟们首先别蒙啊,我们先记一下正确的结论,因为不管怎么说,咱们先有一个正确的答案,正确的框框,那么好。我会讲两次哈,呃,大家不要着急,首先。来。消费侧使用了事物,但是在session中却调用了back,听懂就回滚了,他没有真真正正的提交,就有点类似于就说我们的消费者那个什么session那块设置是要有两个参数,一个是开启事物与否,第一个是签收与否,那么现在假设你roll back了,那不用讲,就是哎,哥们不好意思,我这边有问题啊,就好比那个快递员上门给你们家东东,你说不好意思,现在我不在家,麻烦你呢,一个小时以后再过来送一次,那么这个时候他是不是要重发好?第二种情况,用了事物,企业在卡密之前关闭,或者根本就没有commit听懂你懂的哈,什么叫commit,就是我们如果开启事故视为错,我们那是不是三选,那一定要卡好。第三种情况下,就是客户端要签收的模,这事模那个在这种一个需要你签收的模式下,你们在调用了这个什么。
03:24
揉back是回滚哈,这是recover重试啊,OK,那么好,第二个就是也是这些,是这些情况会导致什么消息重发,第二个问题间隔是每一秒钟重发几次啊,六次默认的啊,那么好,接下来漏眼。有毒消息poison这个是什么意思呢?一个消息被重发超过默认的最大次数是六次的时候,消费端就会给MQ发送一个po的AC,就是有毒的,这么一个标识,就说明这个消息大哥,别的消息吧,一次就投递成功了,就这个消息给我们扯淡打个标识啊,它是有毒的或者就是什么异常的消息,听懂哈,Poison,那么你看官网上是不是叫poison piel告诉消息中间键不要再重发了,这个时候就会把这个消息放到DLQ。
04:13
俗称死性队列,那不用讲,如果他要跟你聊到重发机制,必然会跟你聊哪些消息会引起重发,那么重发间隔和重发次数,那么这个时候他就会跟你聊聊有毒消息,那么这些有毒消息放在哪?放在死性队列?你看看一道题目四连环问。非常的操蛋,所以说各位同学MQ啊,在杨哥看来是什么入门简单?然后按照流程,什么connection factor connection session,消息的目的地,生产还是消费玩火干嘛解耦异步消峰,但是真正正到到生产面试老难的,真的。那么好,同学们请看一下哈,那杨哥你这个时间间隔是一页,重发次数是六,你怎么知道的?来兄弟们,初始发的重发时间间隔多少?1MILLION second是吧?是不是一千一秒钟再来最大的重发次数,那么设置最大的什么消息将会重发的次数?
05:08
在它变成有毒消息之前,那么干嘛默认是六次,如果是设置成负一的话,那么是不是没有限制了,听懂那么这话我们会说,那么来这是我们的一个重发机制啊,那么官网上来兄弟们直接跟你讲了那个details on win消息被重发的话,它的client这些重发的一些细节,你。可以在message重发并DLQ死性处理队列当中,这块能够找到这么说能跟上,那么对于我们的重发机制啊,有效的一些性能和参数,那么比方说就这些好那么同学们,我们官网上还是老规矩,简单的搂一眼,那么你看杨哥从哪取下来的,就是从这儿,那么他会告诉你呢,死性队列它会告诉你重发机制应该怎么配,默认是多少,一秒钟最大重是次数是几,六次重试次数是六次,听懂了吧?啊,待会会演示好,那么最终那么这些属性对于消息的重发机制呢,就非常重要,那么兄弟们不废话,杨哥呢,已经给大家默认了,做了发现。
06:16
来。那言下之见,这一些你需要的时候,那么过来杨哥这儿来进行什么查阅红色这两个是他默认最重要,也是最常考的,最常问的哈,一秒和六次,那么这个请同学们下面了解了这个消息从事机制的一些理论知识,我们呢来看看案例与验证,那么由于时间的关系,兄弟们杨哥呢,就提前写好了一些代码,那么直接呢,给大家来阅读,好,那么因为你写到这儿我我讲过了,我再写这些代码完全浪费时间了,OK,那么来现在我们要试试,就是重发,重发,那么根据我们前面的话干嘛,正常情况下是不是不会引起重发,一次发送一次消费完活,那么。
07:03
怎么会重发?这三种情况里面随便来一个,你看没有看密,比方说我们用第二种啊,什么意思啊,消费侧哈,主要是来生产侧好说,那么就是老规矩,发三条消息不废话,那么队列的什么重发机制测试,那么消费我们这儿咋整呢?跟以前一样,但是注意。我这儿故意开启错,那么杨哥讲过,对于事物开启下面是不是一定要有个卡密特,那么我从一个好的代码里面呢,拷贝出来,大家看我是不是把卡密特给注掉了,那么你懂的,这个错,如果没有卡密特在这个MQ里面,就算你丢过来这个消息了以后,这个队列你懂的,是不是它会被重复消费啊?那么言下之意就是说我要以事物啊,你要看密发三条,消费三条,但是你这没有看密,我这儿是不是会导致重复消费,那么换句话说我干什么呢?故意这么干出bug为啥?因为有错?我们前面多次强调严谨编码规范,有错一定要有卡,但是我现在故意使坏,是不是把卡给干掉了?听懂了吗?那么来,兄弟们。
08:10
看着来。兄弟。队列成高,那么来吧,这儿是不是有三条未消费进来了,3030老规矩,3030不用多说,那么现在OK消费啊兄弟们,那么这次能不能消费的大肯定可以不用多废话,大家看三条没问题吧,好,这是一次啊,那么一一听懂了吧,那么注意为什么说消费者是六次啊,那么现在哈生产一。消费一,但是注意这个时候。没有。卡听懂了吧,那么好过来看,那么假设我现在再消费一次呢?正常情况下是不是这个一,如果这写的是卡密特,把它打开的话,我再去消费是不是应该不会重复被消费到,听懂了吗?那么现在大家搂一眼哈,我们现在。
09:05
怎么着?有没有收到,是不是被重复消费了,这个消息那么好,现在我们看有一我再来第二次啊。值二第二次收没收到,又收到了,再来第三次。三有没有收到,又收到了,再来第四次。有没有收到又收到了,是啊,我就不废话了。我怎么着,有没有收到又收到了。那么再来第六次啊。回答,我这个是你懂的,是不是明显的有异常的,第六次也说到了,哎,注意杨哥上面说的间隔和重发次数几次啊,六次啊,那么也就说这一次是第一次啊,是第一次失败以后不对以后六次啊,听懂了吗?那么也就是一加六等于多少七次啊,那么沿下支线现在请看干嘛。第七次有吗?
10:00
消费完成根本就没有打出来,听懂了吧,所以说默认几次啊,默认就是六次啊,明白好,那么这个就获得了我们的一个验证,那么言下之见,杨哥那这个消息是不是被重复消费啊,那么这个是我们的,过来这儿请看,那杨哥你不是说什么默认六次,消费端就会给MQ发送一个有毒消息嘛,标记这个消息是异常的,告诉不卡不要再再发了,不要再重复消费了,因为你看哈,我们现在在进行什么,第八次有没有。没有在读到这个重复消息,否则你整天重复读到消息是不是很恐怖,那么这个时候。干嘛我们刷新。大家看。带消费的没啦,出去啦,出去哪儿啦?跑到了DLQ死性队列里面,你看三零,三零,你看DLQ以前从来没见过吧,那么异常的消息通通放在这儿,那么我们进来以后就会根据这个唯一的messaged,是不是人工干预去做消息的补偿啊?那么到底出事是哪些消息说明跑到这儿了好不好?肯定不好说明什么,有三条消息未消费,这三条消息都是有毒消息,他们被分配分配在了死性队列里面。
11:19
OK,那么所以说。这个时候请同学们就要明白,那么接下来我们呢?看一下这死性队列,听懂,那么。我们呢,就做一下这个修改,那么杨哥我假设哈,不想要六次,我想要三次就够了,怎么办呢?那么来兄弟们这是不是通通给你写好了,那么我们呢,照着官网上来进行参考和拷贝,那么把这个东东来重新。清零清空,那么删除诶。重新来哈,那么死性队列一删,出了点小问题,删掉删掉,OK,那么现在队列里面空空如也,那么怎么改变呢?那不好意思啊,六次太多了么?这个时候我们要按照consumer重新修改,修改的依据就照着官网的这些给你的参数,那么我现在假设想修改成三次,那么来吧,同学们,这些我节约时间。
12:14
属性配置的我就不再废话,那么好,那么兄弟们找到我们的消费者,那么呢,找到消费者以后干什么呢?跑到这儿。针对于我们的,你看重发策略这个类。开高,然后呢,直接弄过来,那么言下之意,请大家看我们呢,重新设置它。的重发策略,不要用系统默认的,我们要求什么三次就不离了,那么三次就变成什么正常的一次运作了以后如果失败了再重复三次,那么总共就是四次能跟上好,那么这个时候同学们来看看我们的是否有效,那么回到我们的这个东东,现在队列里面空的好,生产者发送过来一组,第一组三条,那么来兄弟们3030妥了,那么接下来来兄弟们。
13:04
我跑。开高第一次正常消费,但是注意什么叫错,还是没有commit听懂了吧,他会重复消费,那么这个是不对的,那么这个时候来看。正常运行以后,后面要变成三次啊,总共是四次啊第一次啊。有。第二次。要。第三次。有那么注意同学们这个时候第四次。怎么着是不是就没有了,那么这样我们是不是改变了它的默认的重发机制的次数,那么这是其中一个,如果你要想改变其他,那么这个时候干什么也可以按照这个类里面的策略,说穿了是不是用你自定义的去覆盖了系统默认值啊,OK,那么这个就是我们消息重发机制和死性队列的初步介绍,据说死信队列我们下一讲会给大家再。加深一些,那么但是这重发机制啊,一定要给我整明白,那么好,这是我们代码级别的,那杨哥这个重发机制,假设后续我们做开发是用spring put和spring咋整呢?那么整合spring以后那么一样。
14:10
你看也会有个类叫重发机制啊,我们自己定一个ID叫这这就说明重发的什么,这个你看哈,就是这些官网上的这些属性,OK,我常用的,那么比方说干嘛是否在每次尝试重发失败后增长这个时间,那么这个时候初二,那么默认是六次啊,这我们设成了几次啊,三次啊,重发间隔时间默认为一秒,那么你看这个是什么,两个非常重要的哈,那么重发第一次失败以后,重发发送之前等待500毫秒,第二次失败再等待500毫秒的两毫秒,这里的二就是倍速,听懂了吧。那么第三一招,那么这最大传输延迟啊,那么5.5以后有效,那么言下之意,我们是5.15都有效,那么也就是说假设首次重连间隔为十毫秒的倍数为二,那么第二次就是为。
15:04
20毫秒,因为二乘十嘛,但是第二次它的倍数是多少?12,那么这个时候每次翻一倍,20的一倍收到40,以此类推,那么怎么引用呢?在activity MQ connection factory,那么这有个重发机制啊,你不写就用默认的,那么写了就会用你自定义的,那么这些自定义的这些属性去哪配,去哪找呢?就请找到杨哥的这个属性,那么我都给大家做了翻译,那么照照。按照呢过来呢来进行配置,那么你就可以实现了我们的重发机制的一些性能上的定义和说明,那么再来,最后,那么现在大家来看看我们刚才是不是故意没有卡引起消息重发,重复消费,那么再来。间隔次数一和六,那么有毒消息到死刑队列,那么这个希望大家能够理解好,那么对于MQ的重发机制,就给大家介绍到这儿。
我来说两句