00:00
来,同学们,我们继续,前面我们完成了,我们用spring cloud stream进行消息的。生产和消息的消费,结合我们的stream rabbit MQ完成了我们的绑定构造,消息的接收和打印,那接下来我们呢,就要来看一下它的高级特性,分组消费与持久化,那前面这些都是一些模板套路,我总不可能杨哥跟你讲讲一些比较水的东西,就讲四个注解标签怎么用吧,那这个没意思啊。下面的问题才是实际工作中要解决和面对,那么来看看我们的分组消费和持久化,那么为了讲清楚这一章啊,我们呢?来先说一下,待会儿呢,我暂停一下录屏,再做一个8803,清楚了吧,因为同学们又是什么键Mo啊,泡沫啊亚啊,你们都快看吐了,我也就不录进去了,那么现在我要继续加深我们的知识啊,现在是一个8801发送,一个8802接收。
01:05
好说,那么下面我们延伸出来三个,那么它启动的话呢,我们环境呢,就是MQ7001服务的注册,8801生产,8802消费,8803消费,那么出现一个什么问题呢?它运行以后,我们要来看看分组19化这些相关的跟MQ相关的问题,好那么盘点一下我们的加点,现在我们的有瑞卡,现在有一个cloud stream的。消息的生产者,那么是不是我们的发送方8801,然后有个消息的消费者是不是我们的接受方8802,没问题吧,那么待会儿我们是不是要来做第三个8803 OK,那么下面。我呢,暂停一下录屏,做一下我们的这个。可以这么讲,就是依照8802听懂了吧,那么这些什么粘贴拷贝的这些事儿我就不录进去了,我把8803。
02:00
完成了以后,我们再开始讲课,好,同学们,终于啊,我呢参考着我们的8802,克隆出来了一份8803,那么刚才这段这个建设过程呢,就不再录进去,那么跟我们上一讲的八八零二一模一样,节约同学们的时间,那么现在盘点我们的家底,那么就是7001这些,OK,好,那么同学们,我们现在。先检查。第一个有瑞卡上面。有一个8801消息的发送者,然后呢。有卡上面的消费者有两个,8802和8803,那么现在是不是三台了?第二个我们的什么鬼rabbit MQ成功启动,那么现在我们的70018801发送者8802消费者8803消费者OK,那么四个为服务开工,那么现在看看。这两个的配置啊,一模一样,除了端口号不一样,其他几乎都一样,没问题吧,那么现在我们运行的与号会有些什么问题呢?来。
03:02
提到了。运行后两个问题。重复消费和消息持久化这两个要解决,否则这个spring cloud stream用起来的话会给你找麻烦。下面我们先说重复消费,然后再说持久化,那么这两个基本上都要靠分组这个特性来解决,这是我们的总干好。那么下面先看消费。我们呢?存在重复消费的问题,这是什么情况下呢?来,同学们,我们先来解决啊。还是这个地址啊,这个地址好像有哈,那么同学们请看啊。我们现在呢,8001要发售800。8802接收8803接收好同学们,我发现在我发了两条啊,一二。来,同学们请看8001B2271471。
04:02
8802请看这个端口号。两条。八八零三两条,那么这个时候同学们。目前是8802 8803同时都收到了,存在着重复消费的问题,这个很麻烦,那么解决倒是简单,但是这个就是说你在生产上一定要注意,一定要避免这个重复消费,这个问题消息被重复消费了。我们后面需要用分组和持久化的属性group来解决,那么下面为什么要解决这个痛点呢?那么请看生产的实际案例。首先比如说在如下场景啊,同学们,我们这个订单做了一个集群部署啊。要消费,他会从MQ当中获取订单消息,如果一个订单同时被两个服务获取到,假设我8801在商城系统发送下个单,现在是8802 8803都会消费到,那么大家请看8802拿到了吧。
05:01
8803拿到了吧,那这就麻烦了,你多扣款的会不会多扣一次啊,所以我们要避免这样的情况,同学们讲到这儿能不能跟上再说一遍啊,我们现在由于没有进行分组,或者是用的是他出厂默认的分组,那么这个时候就会导致8802 8803是两个不同的组,那么这个时候你发送同一个消息到MQ,大家是不同的组的,那么这个时候比方说。我们公司啊,现在发月饼,财务部领完了,人事部去领,那么跟我讲,财务部和人事部是不是两个不同的组,那么这个时候是不是都应该被获取,换句话说的话,我们如果说是同一个订单同时被两个组获得了,那么就会产生重复消费的问题。好,我们需要用stream当中的消息分组来解决。注意在我们的cloud stream当中,同一个当中是多个消费者是竞争关系,那么如果能够保证他们是同一个组,那么他们就只会被消费一次,但是如果你不能保证他们是同一个组,他们就会被消费多次。
06:06
结论就这么一句话,不同的组是可以全面消费的,存在着重复消费。如果是同一个组,假设现在你们是一个订单集群。同一个组里面我们呢,就可以有一个消费,那杨哥我怎么知道他是同同一个组呢,那么现在默认他是什么情况呢?来请大家跟着我。登录我们的rabbit MQ,切记这句话啊。不同的组存在着重复消费,所以说我们现在消息被重复,但是如果同一个组我们就可以只有一个消费,他们存在着竞争关系好,那么就要看你的业务是否要避免重复消费的问题,那么登录了以后。找到我们的交换机脱皮卡,大家请看这个名字啊。
07:00
路卡。这个是不是就是我们的第一个分组,那么同学们请看啊,相当于这个分组啊。大家请看plg这个,你就把它当做8802,这个就相当于说它自己分配的一个流水号组件,那么回答我8802,它的组名是叫这个,你跟我讲。这种组名不容易重复吧,那么再过来,那么假设这个是8803,我的组名是叫这个,那么弟兄们。叫axa,假设这是8803,那你跟我讲。现在是不是他们两个是不是不同的分组,类似于我,类似于我刚才所说的这个是人事部啊,这个是财务部,他们去领月饼,那么我们统一发的话,是不是一条消息被两个组拿到,那么这样的话是不是产生了重复消费的问题,明白,所以说这个是我们的问题所在,那么接下来我们就要用我们的格分组的方法来解决我们的重复消费问题,那么这是故障现象导致原因是因为你没有做分组的话,它默认。
08:11
每一个微服务的组都不一样,不同的组就要把消息都要消费一次,导致了重复消费,那么这个流水号我们需要做自定义的group分组配置,OK,好,那么下一讲我们来讲解决。
我来说两句