00:00
同学们,我们接下来写一下消息手动应答的消费者的代码。消费者呢,要写两个,我们来写一下。我们已经将生产者写完了。对,生产者写完了,将之前做测试的这三个呢,我们可以关闭了啊,不要让他们受到影响,所以关闭。好,关闭掉不要了啊。啊,紧接着。生产者已经写好,接下来在生产者的旁边来两个消费者。分别起名呢,我们都起叫work worker是吧,WORKER03或者叫WORKER03,这都可以啊,完了呢零,因为为什么是零三呢?是因为咱们之前有零一是吧,所以就叫零三了。完,这里写上,哎。注释都是一样的啊,应答。消费消息啊,在手动应答时不允许丢失,并且要求放回队列当中重新消费。
01:01
我们的队列名称啊,也是一样的,所以呢,我们就不再去写一遍了,直接粘过来。生产者那边会将消息发送到这个队列里,对,那我们的任务就是接收消息。完了呢,接收一下。接收消息跟原来一样啊,也是用这个工具类调取新道,哎,这个我们已经写好几遍了。所以呢,这块直接抛出异常。完了,信道拿到手之后呢,我们打印一句话。表示当前是C几是吧,因为我们刚才说C1C2是吧,这个表示是C1等待。等待。接收。消息处理。消息处理完了呢,时间短不短呢,短啊时间短。时间较短,因为我们打算将C呢作为短时间处理角,呃,角啊较短,对。
02:01
我们打算在这里沉睡一秒,而C2那边打算沉睡十秒,这也是咱文档上呃给咱提示的,说是消费者一要沉睡一秒,而消费者二呢,要沉睡30秒啊说说错了是吧,是30秒好,那么所以C等待的时间较短,因为它处理比较快嘛。那既然处理这么快呢,那我们去写下代码直接接收消息了啊。接收消息时一定要记住采用手动的。对,采用手动应答,那么这里面我们可以先写一下关于心道。基本的消费。基本的对吧。消费将队列名字。将队列名字粘过来。完了再往下呢,是问你是否自动凹凸ack。你当然采用手动是吧?自动的话就是true,咱曾经都写过是吧,咱们这块呢,写一个布尔类型的,完了把这个自动AC拿过来,改成不自动force。
03:12
这就是手动了。完后面的内容呢,无非就是回调,呃,回调消息当然我们这都写过了啊,当时咱们都看到了,就是一些这个叫接口嘛。把它消息的回调接口拿过来,完两个参数是吧,分别都什么参数呢?我们不知道,不知道它是可以粘吗?可以粘贴吗。因为函数式接口它是固定的,所以把它粘过来,粘完之后呢,紧接着上方的这个,哎,这个类型就不要了,完之后紧接着来个箭头。来个落地大块,这就是接收消息。完了呢,我们把它粘进来,对。这个位置呢,接收消息就可以,首先你可以打印一下交易是吧。当然了,打印一下消息就表示这了。
04:00
这叫哎接收。到的消息冒号,再加上new一个字符串类型,再来一个message点获取消息体。当然了,你要是如果是中文怕乱码,加上一个UTF杠八也是可以的。那么接收消息之前,你可以这么的在他之前要求进行沉睡。对,例如我们要求呃,臣。沉睡多久呢?呃,沉睡一秒钟。对吧,全是一秒。橙色一秒呢,这是在模拟场景是吧?模拟一个比较复杂的场景代码呢,执行速度需要一秒才能执行完,完之后才接收到消息。完之后呢,要求进行应答。那么沉睡这件事儿呢?呃,我们有一个工具类。在文档的最下面。其实它就是用现成的一个沉睡状完了,当你输入一个秒,因为单位默认是毫秒值啊,所以呢,只要你输入一个秒,它默认乘以1000就是对,就变成秒了,你要不乘以1000,那就是毫秒值。
05:12
对吧,所以这是一个工具类啊,没什么神秘的,所以把这工具类呢,不妨你直接复制粘贴到咱们已经有了的工具类里。哎,就是起到一个呃沉睡觉的作用是吧。就是让县城进行等待。那么这个名字呢,好像在这文档上也有是吧,把它这叫睡眠工具类啊睡眠工具类。至于碎几秒,完全取决于你的书写。来,我们回来。既然有了工具类了,我们就可以在这儿直接调取。工具类。碎一秒,对,这就是沉睡一秒。沉睡一秒之后接收到消息,注意一定要进行应答,因为你下方已经写着叫手动应答了,所以这次你需要进行。
06:01
手动呃,应答的这个代码。要自己写。当然他现在报错是因为他这边后面还缺少一个,一旦消息被取消的这么一个,对这么一个。对,这么一个回调函数没写,所以你可以简单写写啊,打印一下这个表示什么呢?表示。当前的这个消息对他。这个轿车了。叫消费者。这个叫取消消费。取消消费接口回调。逻辑对,这个呢,我们加上完,紧接着手动应答。一旦你接到消息之后,一定要记住手动挡,怎么手动呢?用的是信道。信道呢进行基本的AAC进行答,应答的第一个参数。咱说一说第一个参数。
07:05
第一个参数的意思表示消消息的。标记tag,就是说每一个消息,它是有一个唯一的主见。哎,就对有一个唯一的标识表示我应答的是哪一个消息。就像咱之前图当中,图上画了有个5678还记得吧。有个5678,你看5678就是消息的一个标识,其实这个消息本身就是八吗?不一定,这消息可能说你好啊,但是你好的头上要打一个标记,是八号标记。对吧,就是因为消息太多了嘛,每一个消息要打上标记,哎,打上号段标记,这就是消息,所以来消息在哪呢?在这个消息对象的。属性对钙怎么样?属性在这里。
08:01
是在这里面,在这里面啊,完之后在点上get,你看消息的标记。完第二个参数说第二个。第二个参数就是是否批量还是否批量应答。听过前面课程的同学都知道,我们应不应该批量应答呢?显然不应该是吧。因为批量应答是有可能出现。消息丢失的。应该是处理一个应答一个,处理一个应答一个,那我们本次应该写成还不进行批量false。对,False。表示的就是不批量。不批量。不批量,哎,应答,呃,信道中的消息。完了呢,For呢,表示批量。啊,就这么个情况。那么我们这回呢,就应答完了,沉睡了一秒,接到消息应答,好,这是我们的第消息消费消费者几啊消费者一。
09:08
咱们再写个消费者二,消费者一和消费者二没有必要重新再写一遍了,因为他们之间的区别无非就是这个沉睡的时间不一样,其他代码是一模一样。当然了,这个名字不一样,因为这个叫C1,那个叫C2,所以你只需要将它复制。粘贴页改成零四即可。一旦改成零四之后,你将里面的C。二对,改了,将沉睡的时间改成30秒,对,这样呢就完成了,其他呢都是一模一样。所以呢,我们就完成了这个消费者二的书写。
我来说两句