00:00
同学们,我们上节课呢,已经把生产者的代码写完了。接下来呢,我们打算写消费者代码。生产者呢?负责发消息给队列。那么我们消费者呢?负责接收队列中的消息。所以接下来开始写消费者的代码。打开。我们的开发工具。在这个项目,在这个包下,我们创建一个消费者,消费者的名字叫consumer。对,这个名字。这个呢,叫。消费者。目的是专门接收消息的。完了,我们的写法跟之前一样,也首先呢,你得有一个队列的名称。目的是接收此队列当中的消息。而且名字一定要记住。跟那边一样困。
01:00
完了呢,Name。等于的是。哈喽,可千万别写错喽。完这个位置呢,要进行大写。完了之后呢,在接下来要写接收消息。完了呢,写一个内函数。之前呢,我们都写过一次什么呢?写过一次如何连接,因为你得先链接我们的MQ。本来链接呢,要创建连接工厂。对吧,以及链接的相关代码。我们呢,写一下。首先。创建。这个叫链接工厂,链接工厂名字就叫链接工厂,完了简称名字叫工厂。又一个链接工厂。完之后呢,你这次呢,要设置它的这个关于它的I pip咱都写好了,幺九二点幺六八点两百点幺二九。完之后呢,你再设置他的账户。
02:01
对吧,设置它的用户名。叫什么名呢?叫鹅的蜜。密码叫什么呢?叫123。这个我们已经是第二次写了,刚才在写生产者的时候呢,我们也是这么写的。一旦写完这儿呢,紧接下一步呢,该进行建立链接了,对吧,创建了一个新的链接。新的链接,有了链接之后,我们就可以产生一个信道了。还是老规矩啊,把这个异常抛出去。完了呢,由链接在创建信道啊,增加一个。心道。有了信道就可以进行发消息和。接收消息。之前呢,我们用信道呢,是创建队列,目的是为了发消息,现在呢,我们用信道进行消息的接收啊,自然也就是这张图哎。
03:03
用消费者这边。接收消息用的是信道。所以接下来。这个位置直接写。叫消费者。接收消息。或者叫消费消息都是可以的。这名字都正确。怎么消费呢?拿着信道。直接调取。调取叫之前是public发布。这次呢,咱们是。接收consumer。接收,接收呢,这里面你看这里面有这么几个重载方法,其中一个是队列名。第二个呢,表示说问你是否是自动应答,至于什么是自动应答呢,我们稍后再去说,因为咱们应答方式有两种,一种叫自动应答,一种叫手作用答完我们后面篇幅呢会去讲解,呃,什么样的情况下用自动应答,什么情况下用手作用答,咱本次呢,先用自动应答来的方便。
04:10
完了,紧接着第三个参数呢,就是我们的消费。消费的一个字符串,也就是接收的消息。接收的消息,第四个呢是回调。回调的内容啊。行,那我们一一写一下。先把第一个参数写上,第一个参数表示是。消费哪个?第二个参数呢,是消费成功之后,消费成功。之后是否要?自动应答。那如果要自动挡,那么就是触,哎,代表的就是。代表的代表的是自动挡。
05:02
那么,Force。那自然就是手都能打了。那我们本次呢,先是自动的啊,所以这块呢,写一个队列的名字叫困,队列名称叫hello。完了同时呢,是自动挡,自动挡。完后两个参数是什么意思,我们来说一下啊。第三个参数。叫做消费者。未成功消费未。成功。消费。的一个回调。也就是说,我们不是所有情况下都能够成功的去消费掉消息,或者是接收到消息,那一旦接收不到,你就需要写一个接收不到的一个回调。内容。那么第四个。就是。
06:00
消费者。取消。回调啊,取消。消费的。毁掉。对。这就是第三个参数和第四个参数的意义啊或者作用。第三个参数和第四个参数到底怎么写呢?一直没有往里写啊,是因为。他需要。拉布达斯表达式啊,所以我们进去看一眼。哪个是呢,这个是是吧呀。这里面呢,让我们填写的第三个参数呢,是一个,你看是一个叫接收消息回调的这么一个。函数式接口。完了呢,另外一个呢,是。取消接收的一个函数式接口。都是接口哈,所以接口没办法直接往里填,而这个接口呢,需要你去。对,去实例化。
07:00
需要去写那个匿名内部类,当然了,咱们现在由于用的是JDK1.8。1.8了,1.8都有新特性,可以只用这个用用什么,用拉布达斯表达式是吧,用拉布达斯表达式就可以写了,就不用写匿名内内。那好,我们先写第一个接收消息的回调。它这里面不需要返回值,需要有两个呃参数。所以这个函数式接口就应该是这么写的。在上方进行声明。怎么声明呢,这么声明。接收消息对。是一个接口,正常情况下原来是需要你有一个时间类,现在不需要了,现在是用拉布达斯表达式,所以呢,紧接着直接就是先复制。参数。对,复制小括号类型呢,可以不写,都是可以简略省略不写的。
08:01
这是省略的地方,完后面怎么写呢?是是吧,写死右箭头完落地大括号。就可以完成了这次代码的书写。在这里面我们就可以接收消息了,消息是谁呢?第二个就是消息。所以你要接收消息也很简单,将消息接收进来。消息怎么接进来呢?首先这个消息。是一个字符串类型的。你可以直接哎打印它,哎,这就是我们的一个消息,你也可以呢,自己亲自创建一个message消息。对,Message消息。完之后呢,再去用一个字符串对象,完了把它进行构建也是可以。那么我们没有那个必要,直接就呃打印这个消息就可以了。这就是消息的接收,好完之后把它放在第三个参数即可。
09:01
第四个参数呢,表示是消息被消费,一旦被中断,哎,被取消。的时候需要进行回调,如果消息正常接收,这个回调是没有任何意义的。那怎么写呢,这么写。直接到达这里面去。根据这个接口啊,写法跟上面差不多是吧,这个是声明什么呢,接收。消息。这个呢,是。取消。消息。时的一个毁掉。完了,接口也是这么写。对,完了呢,也用拉布达斯表达式。只不过你这次粘贴的就是这段。完了粘贴完之后往这一放,当然这个泛型可以,这个类型可以不要,但是括号再要,那括号可以不要,完之后呢,再写一个呃,箭头。完再写一个落地大括号,哎,就可以这么写。
10:03
啊,这都是很简单的写法啊完这块可以打印一下。什么时候这个回调会被处罚呢?就是当消费消息。消息。应该是消息啊。消费被。中断啊,被。中断。这么个时候。它才会被执行完,你把它放在第四个参数。完了,这个呢,逗号呢。要在英文输入法下。所以到此,我们就写完了消息的消费榜。那么消息的消息方如果正常被接收,会在这个位置被打印出来。当然真正执行去接收消息是这句话。这句话一旦把消息接收到之后,他把消息放在了这个。对这个声明接收消息的一个接口里完,根据这接口的时限内再进行打印。
11:01
我们来运行一下试试啊,现在目前咱们这个消息队列当中是有一条消息的叫hello world世界你好。完了,你现在呢,可以去接收一下试试。接收完之后呢,在控制台上就打印出来了。打印出来是一个对象的地址啊,所以呢,我们这里面呢,可以怎么呢,可以把这个消息再进行转化一下,比如。你有一个字符串对象,完了,他呢在转,拿着他的,哎,消息体,对,因为消息本身呢,有消息头,消息属性和消息体,而我们并不希望拿到消息的消息的其他信息。我们只需要消息体就可以。所以呢,你这回再打印一下,就打印的是。正常的消息了,但是刚才的消息已经被我们接收完了,所以我们可以这么的。可以先启动。消费者。完启动完之后呢,发现没有消息完,这时候你再触发生产者,让生产者呢,再发一遍消息。
12:07
你发完了完消费者呢,就再次接收到了哈罗沃的这个消息,这是一个消息体啊。所以呢,我们完成了这次消息的发送与与接收。
我来说两句