00:00
嗯,所以整合level MQ呢,嗯,我们一般情况下呢,就在咱们这个项目当中呢,引入这个叫做3AMQP这样的一个赖就行了,这个是good给我们提供的呃这样的一个工具,那它在我们去啊和rabbit q去创建连接的时候呢,就非常方便啊,那如果我们不去使用这个spring给我们集成的这样的一个依赖的话呢,我们和rabbit q去要创建一个完整的连接呢,就需要一点点去写,比如说我们要新创建一个connection对象,然后再创建一个channel,看嗯,Channel对象,然后呢,呃,再把channel对象设置到action对象里,然后再创建一个啊virtual host的对象啊,然后再创建呃,Exchange对象,然后再创建Q对象,然后再把change和Q对象再绑到一起,然后才能发消息,是这样的一个过程,那如果我们引入了词这样的一个依赖的话呢,那么我们发消息的过。
01:00
就变成了一句话了,那么所有创建对象和创建连接的过程呢,都可以被放在配文件当中去去写哈,好,那所以接下来呢,我们要用的呢,就是就是这个方式啊,直接用个部分,我们就简化我们的代码开发,把我们的精力呢集中到业务逻辑上,那接下来呢,我们在这个rabbit MQ当中存数据呢,我们其实啊要存一个对象进去啊,那这样的话呢,我们希望那个对象呢,是被Jason序列化到我们的rabbit MQ的这个服务器当中的,那么所以呢,我们要用到一个啊这转换啊这样的一个依赖,然后接下来呢,我们希望呢,在我们发消息和监听消息的时候呢,啊去打印一些日志,所以这块呢,就引入了一个这样的一个依赖,那么因为像MQ的这样的一些基础的一个配置呢,在很多的微服务当中有可能都会存在,所以呢,我们就把red MQ的一些基础的配置呢,配到通用的这样的一个配置当中,所以我们之前呢,有一个呃通用。
02:00
配置的这样的一个模块叫service base啊,我们可以把rabbit和MQ相关的配置呢,都放在这个service space里面,当然了,如果你想把这个业务功能做的更独立的话,或者说把Q这这一块的整合做的更独立的话,呃,和其他的模块有合性,耦合性更低的话,那么呢,我们呢,就可以单独的创建一个专门的rabbit MQ的配置模块,那么这个配置模块呢,我们可以给它起个名字,比如说就叫rabbit配置模块,那这个模块的创建方式呢,跟我们之前创建其他的模块是一样的,所以我们右键new啊module,然后接下来呢,我们在这个地方还是选择level,选择next,然后在这里呢,我们就直接rabbit q就可以了,嗯,然后接下来呢,我们点finish,好,这样的话呢,这个rabbit q这个模块呢,就放建到这个位置,然后呢,我们在po的XL当中呢,去引入咱们的这个依赖啊,依赖的话呢,就是这些模板。
03:00
大家做一下,然后接下来呢,呃,先下面这些我们把它引进来啊,把它引到下面这个位置,那啊不要忘了再给刷一下啊,给它刷新来好,那这块呢,就是引入我们的依赖了,引完依赖之后呢,啊,我们啊要创建一个关于rabbitq当中的一个消息自动转换器,那这个消息字母转换器呢,可以把我们的对象类型的消息自动转换成Jason字符串,存到我们的外MQ的这个消息队列当中啊,就队列当中一般情况下我们存的都是一个字串啊,就就一个消息啊,就是更多的存的就是一个标志位啊,一个状态啊什么的啊,如果你要存对象的话呢,我们可以把它转成Jason的形式,那这个呢,就不用我们手工转换,直接我们把它配一下就可以了,好,就有点类似于我们网red当中存数据,然后我们之前配了一个red的配置文件,然后它可以自动处理我们的那个red当中的这次转换一样哈。
04:00
那我们呢,在这地方呢,创建一个包。好,然后呢,在Java这个里面,我们new一个package,好,那这个包的创建就就不多说了,嗯,前面的一定要能够被其他的模块扫描到,所以我们其他的模块看一看,扫描的包就是这两个包,一个是这个包,一个是这个包,所以你写的这个配置呢,一定要要么就在这个包里,要么就在这个包里,对吧,你要哪个包都不在的话,那你就在这个地方把你那包名贴到这就行了,明白吧,啊,所以那我们这个包棉起的时候,大家就要注意一下了啊,就是你这包棉一定要在这方里扫描的,好,那这块呢,是我们的这个,然后呢,我们就把这个呢给它创建一下,那么我们说呢,它叫MMQ像这个啊,这个其实不用大家去记忆啊,就像这种配文件的东西,你就直接知道它怎么用,你要用的时候,你其实就粘出来就行。
05:06
然后呢,这块我们就是一个B,它主要就是一个message convertor叫做类型自动转换,把普通的对象类型的转换成我们的这类型,当然了它这个转换的过程就用到了刚才我们引入的这个叫fast有化地方,那这块是我们的配文件分好,那这个配置文件创建完成了之后呢,我们来看一下我们的一些常量的定义,那我们知道刚才我给大家看了一下,就是我们的这个Q,这个里面的一些基本的组件,这里面基本组件connections呀啊,Channels呀,Exchanges呀,S呀啊,那其中呢,我们的connections其实就是远程连接了,远程连接的话呢,这些东西我们是放在配文件当中,比如说远程的服务器地址啊,用户名啊,密码什么的,那么从这开始,就是我们在呃,连接到外B的MQ之后,需要创立建的。
06:06
一些底层的一些对象了,那么相对应的呢,就是这张图当中呢,比如说我们要连接到呃,Rabbit q,我们需要向rabbit q当中写数据,我们肯定得把这些对象都创建出来,对吧?啊,就像你那个连那个呃,JBC,你不得先创建一些基本的连接,完了之后,你不得先创建一些基本的对象,对吧?啊,这里面也是一样的,创建exchange,创建Q等等,还有exchange下面有路由啊等等等等啊,路由就是给你路由到,具体路由到哪个Q当中,那这些东西呢,他们都有一个名字,比如说你这个队列的名字叫什么,你这个交换机的名字叫什么,然后你那个路由器的名字叫什么,都要给它们起一个名字,那这些名字呢,我就呃定义在了这个常量当中啊。就定义在了这些常量当中,然后一头呢,我们去使用这些名字呢时候呢,就会方便一些,好,然后呢,我们就先把这个常量那个定义出来,定义在胖的包当中就可以了啊,我们在MQ这个地方呢,新加一个胖啊pack看好,然后在这个抗子包下面呢,我们先添加这常呀就行啊,那这个呢,诶上面上了S看好,然后我直接把这个内容过来,这些名字是咱们自己定义的啊,自己定义的没有什么规,就是固定的啊,就是那个条条框框,但是呢,我们就是最好呢和拉贝Q当中默认的那些,呃,起的那些名字呢,就风格保持一致,那我们会发现这个上面它默认的起的名字呢。
07:54
都是这种类型的,就是中间带点上这个啊,好,这带那个,呃,像带这个下划线,这是我自己做测试写的,好,那像这个带点的这种游戏的exchange这块都是它默认类型,所以我们起这个名字呢,也就跟它这默认名字一样,比如说这是交换机的名字,这叫exchange,这个交换机,交换机的topic topic是就是交换机啊,我们那种利用交换机做广播啊的这样的一个消费机制,你们之前学过若干种哈,我也去问大家了,总之呢,我们有这样的几种模型。
08:35
这几种模型呢,就就是分别是叫做啊就是都叫定阅模型啊,这个定位模型呢,它有这几种叫find out发到这广播模型,什么叫广播模型呢?就是我这个消息订下去,我发一个消息,我想要发给很多个消息的几种的,那么呢,我就先把这个消息发送给交换机,然后呢,由交换机呢,帮助我把这个消息同时广播给所有的消息的接受者,这是广播模型find off,然后另外呢,还有一种呢,叫做啊订阅模型当中的direct direct呢叫路由模式,好那么我们会在交换机当中呢,创建一个路由,路由是什么意思呢?就是我有选择的把这个消息发送给不同的消息的接收者,那前面我们说的普通的广播模式就就像一个大喇叭一样,村村口一个大喇叭是吧,村头那大喇叭你只要在这个村里是吧,你就能听见,反正他就是广播。
09:35
呃,你必须提供,除非你这个机器倒掉了,你没启对吧啊对吧啊,你只要启动了,那么你就能接受它的网格这种网络模式,那什么叫路由模式呢?路由模式就是比如说你家里有一台收音机,你是可以调频道的,对吧?然后我广播的时候呢,我针对某一个频道来的网播,我针对这个一一台来的网播,那么就只有一频道能听到,我就针对二台来的网播,那么只有二频道能听到,所以说呢,他这个路由,比如说呢,我要广播的这个路由的地址吗?就叫L由地址,那么呢,我这边调到L频道了,那我就可以听了,我这边也得到还有频道了,我也可以听,那我说我这边的这个消息接收呢,我这同时可以接收多频道了,我比较厉害,我既能接收,因为个人频道又能接受L频道又能接受频道,然后我这面的路由呢,我就有11233这路由对吧,那如果我发L路由的这个消息。
10:35
的话,那么就C1和C2都能说了,如果我发一个路由的消息,或者是方念路由的消息的话,那么我只有C2能说了,所以这个叫路由啊,就是它可以有选择性的针对不同的消息的接受者来发送这个固定的消息,然后这样的话呢,就我们的应用呢,就更灵活了,所以这个呢叫direct阅模型,然后最后一种呢,叫模型,他模型呢,其实它也是就是路由的一种,只不过这种路由呢,就更高级一些了,它是带充配的。
11:07
这种同配符的话,那比如说audit点点意思呢,就是它可以匹配audit.iss点啊corporate或者是奥和点is,这大家能看出来吧,G就是后面还有多个代码端或者是多个频程段啊,都可以匹配,那这种路由,比如说我我我是往这个路由吧,那么我我这个啊,到时候我这边的路由地址就是消费接收者呀,它定义的是这个路由地址的话,那我消费发送者呀面我无论是往这个路优发,还是往这个路优发消息,那我的接受者都能够写到啊,然后呢,这边呢就是心,心是什么心就是就品的一个单词啊,那如果我消息的接收者里面,我说我要接收这个时给我发的消息,那么你就只能接收从消息的发送者这个方向在这个频道发送的消息了,那这个频道发的你就收不到了,明白这意思吧,所以那其实我们平时在开发的过程当中肯定会选用那种。
12:08
更灵活的模式,更灵活的模式就无论你用不用这种通讯服务用啊,其实我们都会选择这种topic的这种模式啊,好,那所以呢,嗯,就是我在这边呢,就给它起了个名字就叫做。啊,exchange.topic叫SS,那实际上这个topic你一定非要他起,你就起T人的东西,因为这个名字是你自己起吧,啊只不过就想让这个名字根据语义这里啊,然后呢,这个SMS呢,就是发短信啊,就是那我这是短信交换机,好,然后呢,交换机下面配入由啊,就是我们刚才不是说了半天说的是路由嘛,那路由创建在哪?路由是创建在交换机里面的,这是路,路由对象要创建在交换机对象,所以呢,那我们在这个地方呢,就又定义了一个路由的名字,那这个路由的名字实际上就和刚才我们所说的这些通配符呀,还有这个呀,还有刚才我们所说的就是这个包括direct这种模式当中的只有只有一个代码段,就是只有一个名称段,不带点的这种啊,他们一定要严格去配,所以这个呢,其实就是你的路由的地址小吗?然后回头你发的时候呢,你你从这边发,你就能得从这边一。
13:24
接啊,你就相当于你从体育频道播播节目,你就得打开体育频道看,你打开综艺频道,你看不见的,明白吧?啊,所以这个呢是我们的路由啊好,然后接下来呢,就是消息队列了啊,通过路由我们这个消息呢,就到达了消息队列,那这个也是我们自己起的名字啊,也是自己起的名字,这个是Q是队列的意思,SMS是短信的意思,S就我发送单条消息啊,这个路由也是啊,PK单条消息的路由,当然了,就是你们带到企业当中的话,可能会有更复杂的场景,比如说发送一个列表就批量发消息,那如果批量发消息的话,一般情况下我们这块就习惯于起个类似,那这里呢就可以发批量消息啊,我们现在这个项目没有那么复杂哈,我们就发单条消息,那一般情况下就约定俗成,可能很多人愿意起这个S这个名字,但是一定要,嗯,给大家强调一下,就这个名字并不是啊,就是就是不一定的,并不是规范啊,不是规范就完全。
14:24
配机器好,那这块呢,就是我们的三个产量,嗯,这块就简单的又领大家回忆了一下,之前我们rabbitq的几种订阅模型啊,当然了,Rabbit MQ除了这种订阅的广东模型之外呢,还有基本模型以及word模型啊问模型这块呢,就是呃,我也简单给大家回顾一下吧,就是能者多劳模型,什么叫能者多劳模型啊,就是比如说C1它是一个消息的进入的,C2它也是一个消息的接受者,那么C1这台服务器它的性能就不太好,呃,然后C12这台服务器性能很好,然后结果呢,我发消息的时候呢,默认情况下呢,他是就是呃,给他们平均分配任务的,比如说我这边消息呢,一共发了100个消息,批量发发了100个消息,那么默认情况下呢,C一会接收50个消息来处理,就相当于零五十个工作任务,C2呢,也会接收50个消息来处理,相当于。
15:24
那就有50个工作任务,那么大家想一想,如果C的性能非常不好,C2的性能非常好的话,是不是就意味着C2可能很短的时间内就把这个工作任务做完了,然后他就闲着了,这台服务器就闲置了,然后C这台服务器呢,就慢腾腾慢腾腾就一直在在腾着,然后呢,他就然后消息的处理速度就综合起来的话看呢,就是都有那种什么木场的那个短板那个原理是吧,综合起来看的话,那肯定处理消息的总时间就会很慢。对吧,啊,就是他用了一秒我就处理完了,他用了十秒处理完,那我整个这个消息队列,所有的消息处理完是不是就他的十秒了,明白吧,那怎么办呢?我就可以用能者多劳模型,能者多模型呢,它会让这个处理消息更快的,这个服务器呢,去处理更多这个消息,那也就是说默认的情况下呢,是平均分配,他领50条,他领50条,然后你俩一起干,就是领工作任务啊,你领50个任务,你领50个任务,你俩一起干,那肯定有害吧,好,那么能得多少模型是什么呢?一条一条的你领一条,你先干着,干完了你再领,干完了你再领,明白吧啊所以大家想他干的快,他就领的多,是不是他干的慢,他剩下的还没被领呢,还在这个嗯,小就业当中呢,那就被他列的这个C2明白吧,所这个教程对多少模型了,好然后基本消息模型呢,是最简单的,就是一对一的拉消息啊,我把这个消息只要发送到消队列。
16:56
当中,那么我的消息的接收者呢,就接到了,如果还有一个C2的话,他能不能接到就接不到了。
17:04
这个消息是一对一的,只要我发到这个消息队列当中,谁先监听到谁就拿到了,明白吧,啊,然后呢,C2后期动的C2拿到了,因为已经类似于效率的了,所以这个其实就是最简单的模型了,那么这样的话呢,就是嗯,简单模型,还有能者多劳模型,还有定阅模型,定位模型当中呢,就三种啊,一种是这种。一种是这种广播模型啊,就是反正我广播出去都得收,还有一种呢,是。这边哈,反正宝播是是你就不管谁,只要你这个服务器处在监听状态,那你就都能收到啊,都能收到,我这边就发一条消息,但你看他也收到了,他也说到了,好,然后呢路由根据路由去匹配,然后呢就是通配符路由啊,然后路由呢可以设置更灵活一些,通过通类持,所以这个是我们前面说的消费保险啊,一般情况下不出什么意外的话,我们项目当中可能90%以上的都会用这种订阅模式,就是广播啊广播,然后呢,广播进去之后呢啊,就是很可能很多微服务都要用的啊,就比如说我一个用户注册。
18:17
每一新用户注册到这个系统当中,比如说一个游戏网站啊,有一个新用户注册到系统当中的话,你可能有不同的这个模块呢,都对这个用户新新注册的这个用户的这个消息能感兴趣,比如说这个是用户注册为主啊,然后我这里面有新用户注册进来之后呢,其实我要通知谁呢?可能我要通知积分为给这个用户呢,增加积分对吧,我还要通知优惠券给这个用户呢,增加优惠券是这意思吧,我还要通知那个啊叫什么啊,短信微给这个用户呢,可能还要发个短信是吧,我还要弄一个微信服,可能给这个用户呢,微信当中是吧,根据用户注册那手机号,嗯,再什么添加一下他这个用企业微信给他添加一个添加通知等等的吧,所以说呢,我用户注册的这一个功能呢,可能很多微服务都对用户注册感兴趣,那么我用户注册完成之后,我针对用户注册的这个逻辑,我完成之后。
19:18
如果我在用户注册的这个业务逻辑当中去添加积分,添加优惠券,发送短信,添加企业微信等等这样的一个工作,你会发现用户注册的这个微服务他的呃,工作量太大了,然后做这个微服务的这个开发人员呢,他要会好多事情,他要会积,他要懂积分模块的逻辑,他要等优惠券的模块的逻辑等等等等,他都要用,那么如果有了这个消息队列的话,我们这边是不是就不用写了,我就直接把这个用户注册这件事情告诉小雨列说,哎,用户注册了,那么用户注册完了之后到底要干嘛,你就不用管了,由谁来管,是不是由我们的积分类服务自己上消约了一定消息,他一看,诶,有用户注册积分类服务,就自己就把用户的积分就加上了,然后优惠券为服务呢,自己上这个里面领了一个消息之后,他就自己把这个用户的优惠券给加上了,对吧?啊等等等等啊短信企业微信好,那所以这个要用到什么。
20:18
啊。是不是订阅那个模型啊,订阅那个模型对吧,就是我发这一个消息他们都要用的,所以绝大部分的企业当中的M特的场景的话,订阅模型居多啊,订阅模型居多好,那这块是我们所说的前面这句话,那我们这个项目当中呢,也用订阅模型啊,所以呢,我们发的肯定是订阅消息了,那这块是咱们前面要做的一些准备工作,然后接下来呢,咱们就最后呢,在这个准备工作的最后吧,咱们再创建一个通用的一个m two service,我们把它放在我们刚才创建这个模块的service的这个包下面,所以呢,这边我们再创建一个包。
21:03
看见一个包,然后在这个包下面呢,我们创建就是这么一个MQ这个类,好,然后在这个类里面呢,我们来看一下,呃,首先呢,这个MQ service它一定是被我们的spring容器自动的去加载进来的,所以呢,它应该有一个S啊,然后接下来呢,一会我要可能要打这个日本,然后写一个山峰,然后再接下来呢,我们啊,只要在我们的。配文件当中配置了关于MQ的,呃,MK文件在这呢,啊,这个MQ的,呃,AMQP啊这样的一个依赖的话呢,实际上我们在我们的啊业务当中呢,就可以去注入这样的一个连接对象,这个连接对象呢,Resource resource,这个连接对象呢叫amqp temp,就是跟am am mqp PA好,这个东西呢,就是有点类似于我们的那个red的那个time配一样啊,你看要怎么算amq he time少点啥,嗯,Time哈,对吧?啊这个就。
22:35
类似于我们连那个red一样,就只要你把配置都配好了,那么我们就自动就会有一个连red,然后它就你就用它里面的一些结果方法,自动就把液你连上了,明白吧?啊,所以这个是我们刚才的那个依赖里面给我们提供的这么一个他黑的对象啊,直接建立远程连接的,那么这个远程连接的这个他配的对象呢,它会简化我们的呃,MQ的这样的一个远程连接的一个过程,那么正常情况下,我们与MQ远程连接的过程长什么样呢?在再给大家简单的回忆一下啊,用一分钟的时间,就是你们之前学MQ的时候呢,应该有嗯这样的一个过程。
23:20
就比如说我建立一个最简单的连接吧,那我应该获取连接的GA connection,这该connection在哪呢?是我们定义的一个同学类,那你要在这个同学类里面去,比如说建立连接工厂,设置连接地址,设置连接端口,这个连接端口是MQ的Java代码端的客户端端口啊,然后浏览器端的客户端端口是15672 Java代码端的客户端端口是5672,这个大家要知道,然后再接下来呢,就是。我们的这个啊鼓励是吧,啊这个是我们就是呃,相当于我们的虚拟机啊,有刚才我们创建的虚拟机啊,这个呢,就是我们刚才在呃那个后台创建的用户对吧?然后这个呢,就是我们用户对应的那个密码,所以我们都要用代码来写的啊,那如果我们引入到嗯,Spring当中的话,那么这些呢,其实都会转化成配文件,就是这样的,那这是关于配置,那么接下来呢,如果我们用原生的这种,嗯这个的这个这个代码去写的话呢,我们就是先创建式,再创建China,就是这样的一这个图。
24:26
首先创建很难士对吧,然后再创建穿。好,然后下来呢,是不是把这个channel设置到当中啊,然后再创建什么呀,再创建这个啊,就是Q校绝列,然后China呢,就往这个校队列里发消息,当然了,这是最基本的消息,这最基本的消息呢,可以没有交换机参与啊,那么另外呢,复杂一点的消息呢,就必须有交换机参与了,比如说我们刚才说的最后的那个topic模型,我们发的时候呢,就先创建connection,再创建channel,然后把channel设置到当中,然后再创建什么呀,交换机X设置交换机,声明交换机,然后再声明什么声明路由啊声明路由,然后再干嘛,然后再这个通过这个交换机和这个路由,然后去干嘛呢?啊呃这呃这这个是那个交换机,这是交换机类型啊,交换机类型咱们不是说了三种啊,一个是topic对吧,还有一个是direct对吧,还有一个是那个3OUT对吧?啊所这个是交换机类型,然后这个呢是交换。
25:34
然后这款是路由,然后这块是什么。这块就是你发消息的这个消息的类型啊,消息类型,这就普通字符串类型嘛,那相当于我们就刚才把无论识的对象都转换成了什么呀,这些小字串对吧,它就可以存字串,这个是消息的本身,所以这个是一开始你们写这个往MQ发消息的这么一个基本的代码啊,这是发消息的基本的代码,那么我们的整合的项目当中的话呢,一般都在这个spring put当中直接整合刚才我说的那个a to的,那么整个的这行代码到了我们项目当中就变成了什么呢?就变成了这个。
26:12
就这一句话就完事了。是不是很简单啊,所以这个就是项目整合啊,所以如果大家对之前的这个不了解的话,那么通过我刚才的介绍,我希望呢,你稍微有一点点印象,就是呃,基本的呃,这个往我们的Q当中去发消息啊,它应该是一个什么流程,这个流程为什么想让大家知道,还是要看一看呢?因为给我发消息的底层原理你还是要知道的,你会发现我们项目当中在这个地方,呃发消息把所有的就是这个过程都好像就透明吧,所以说你单纯的通过项目当中的这个这一句话,可能不是特别能深刻的理解我们MQ的这样的一个消息机制,它到底是怎么运作的,对不对?呃,所以通过刚才那个代码呢,然后我希望大家呢,呃,就是你能够去知道啊rabbit MQ它的底层机制,实际上它就是结合着这张图来创建的对象,然后把这些对象都联系起来,这样的话我们就消息就发出去啊,就发消息的个过程好。
27:15
然后呢,那所以接下来呢,我们就在我们的这个代码当中呢,啊,通过刚才我们说的这个内容呢,就把这个消息拉出去,但是这个方法就是我们自己写的一个方法,然后呢,就上MY。Message send message,然后呢,这块我们就定义一个string string就是a change,这个是交换机啊,然后呢再定义一个string,这个string呢叫ringt,当然这个名字你可以自己己啊这个路由的那个名字,然后再定义一个object object我们就定义MY,我们要发的这个消息,好然后呢,我们这个消息呢,就比较灵活,任何的一个对象类型都行,因为最终呢,我们会把它转换成这符串了,好然后呢这块呢,就是我们的一个方法的定义了,定义完了之后呢,在这个地方呢,我就可以发了,就用刚才咱们的这个amqt complete,然后点convert and s哈,就是转换和发送啊,然后呢,这个里面呢,我们它需要若干的参数啊,一个呢是exchange,就是啊路呃,路由。
28:30
的那个交换机的名字,然后呢,还有呢是routine key往哪个路由当中发,然后还有呢,就是message,你发的消息是啥啊,就这样的,然后如果有问题的话呢,那直接就好一条,如果没问题的话呢,我们就给特别好。所以呢,这个就是我们简单的一个呃,发消息的这么一个代码啊,那所以这行这一行代码呢,就是在做什么事情了,就是在创建我们的connection channel exchange q finding对吧,Exchange和呃我们的路由绑到一起,然后再发,做了一系列的事情啊,我们就写了这一行代码,它都可做了,明白吧?啊所以这一块呢,是我们创建MQ service的这样的一个过程,那么一为的调试方面呢,我们可以在这个地方呢,打印一下log.ino,然后呢是呃发送消息啊好,这是这样的一个过程,那么呃,这个消息发完了之后呢,我们就可以去写我们的业务逻辑了。
我来说两句