00:00
同学们,我们上节课呢,已经讲完了,这个交换机如果收不到消息,可以进行回调接口对接口回调。那么我们后来又遇到了什么问题呢?是队列?对,如果ROK出了问题,或者队列不存在了,这个队列收不到消息,是不是应该也进行回调接口啊?因为它底层默认是把消息给丢失了,你看这呢,我们看一下。正常情况下是这样的。你知道?回退消息,为什么要回退消息呢?首先这是一个什么参数啊?你先别管,在仅开启生产者确认机制的情况下,交换机接收到消息后会直接给。消息生产者发送确认消息,这个事儿呢,我们已经完成了是吧?如果发现该消息不可路由,注意,不可路由指的就是。
01:02
下一个环节。就是交换机的消息该去队列了。这个过程叫。不可路由。对路由啊,不可路由是无法发过去是吧,那么消息就会被直接。丢弃。此时,生产者是不知道消息被丢弃这件事儿。也就意味着现在是什么情况?现在是生产者发消息给了交换机,交换机在路由给队列时,路由不到,直接消息丢失了。丢弃了,对,丢弃了,此时生产者根本就不知道这件事儿。所以这就成了一个问题。那么如何让无法被路由的消费消息说?这个让我处理一下,起码通知我一声,就告诉我生产者一声,我生产者来处理。那怎么办呢?只能通过设置这这个参数啊,叫什么monitor monitor是吧,哎,这个参数。
02:02
可以呢,将当消息传递过程中不可送达的时候,将消息怎么呢返还给生产者。也就意味着交换机你不是送不到吗?你送不到,你把消息退回来呀,是吧,送不到那你退回来呀,退回来。退回给生产者,生产者重新发呗。明白这个道理吧,所以说我们需要设置这么一个叫monitory参数。那么代码怎么写呢?代码也很简单。第一步,你需要到配置文件里。像之前一样,你先要打开一段配置。这儿呢?之前你打开这段配置呢,表示是交换机进行确认消息,你接下来要打开的这这个配置表示要退回消息这里发布。退回。
03:00
退回吗?退回。只要你加上这个这个配置了,那么他一旦投递不出去,或者路由不出去,他会回退消息给生产者,怎么回退。打开这个配置文件之后,下一个就要写这个回退接口,你看这个接口曾经是交换机的一个确认回调方法,同时这里面还有一个逗号。叫rabbit。To。这你看回退接口。这个就是回退接口,那么好,接下来把它。下来之后呢,这就多了一个新的方法,这个方法呢,就是就是哪句话就这来把这个粘过来啊,就是。通知我一声是吧,这这句话。可以,在当消息传递过程中不可送不可达到的是吧,不可达目标地时,将消息返回给生产者,就是他注意,所以下面这个返回一定要记住,只有。
04:11
不可达说,哎,只有不可达。目的地的时候才进行回。回退。成功了就不来了啊,注意啊,成功可不来了,所以这个位置能来到这儿啊,只有成功是吧,哥,只有失败呀,没有成功。没问题吧,现在这个落下这个方法一般的名字都不对,是因为没有没有当这个源代码,你把这源代码当一下。你看源代码荡下,荡完源代码之后呢,你把这个方法呢,再给它去掉,对完成呢,你再让他重新落一遍,这样的方法上面的参数就有名字了。你看这回的名字,你就非常清晰了。什么清晰的名字,这个叫message,这个叫这个失败的以这个码是吧,这失败的原因,交换机以及RO。
05:07
是这样吧,是这样是吧,所以呢,我们在这里面就可以用这个log日志啊进行。A错误级别的一个打印这块写上叫消息。消息谁是吧,是一个占位符是吧,消息谁被交。或机怎么的。给回退了。交换机谁呀?是把交换机的名字也得写上,哎,哪个交换机给。退回。完了,逗号退回的原因。冒号。大夫。是吧,再来一个路由。K是多少三对后面呢,你把这些东西填上呗,比说消息谁是消息啊,那当然是你有一个字符串类型的一个message获取消息体嘛,这是消息呗。
06:00
完了呢,谁是交换机啊,它是交换机谁是错误的原因呢?它是错误原因,谁是柔ting k啊,它是柔定K对吧?完了这四个位置占用了四个四个占位啊,四个大括号的一个占位符占位啊,所以就打印了这个结果。那我们一起来试一下吧,我们之前是不是这个消息就发的有问题啊。在呢?咱们之前呢,把这个ROK是写错了的。你看这个柔钉K呢,一个写成了叫KK1是正确的,一个是K12,你看是错误的。所以我们来试一下。会回退几个呀,对,会回退一个呗,发送两条啊。刷新你看发送两条,回退一条。看有没有回退啊。我们回退。的内容在哪里?首先这是发的第一条,这发的第二条,交换机成功了。
07:02
对完之后,紧接着下一个交换机也成功了,我接收到一个就就一个,是不是成功一个呀,那么队列这个什么返回的消息,但是。没有内容对吧,没有内容,那么为什么没有成功呢?没有看到这个咱打印那句话呢,是因为还是老办法,就是你没有将当前内部接口注入给。内里你看像这个。咱们之前的上一个接口,你记不记得上一个接口的实现类已经被成功的注入到了rabbit temp类,那你第二个接口你注入了吗?说没有注入,对,所以应该写一个,这呢在接着注入叫template设置。队列回退接口,对,你看。你这个也得写,你这个要不写你这个时间类并没有在这个类对应的这个接口上,所以你在调这个接口的时候,根本就不是用这个时间类。
08:03
所以需要注入一下,哎,你注入完之后呢,你再重启。这回就好了。好,又重启了一遍是吧。好了吧,好了之后我们再发一遍啊发送。发送完同学这回看啊,回退来了。发消息发了几个,发了一个,发了两个,完两个,注意啊,交换机都是成功的,完了,接收消息只接收到了一个,另外一个被回退了,你看消息大家好1K。1K2。被交换机它退回,退回的原因是没有柔听K是吧,哎,因为路由K是K12,没有K12,只有K1。所以回退的原因有没有了,有了。你看这就有了。
09:00
看到了吧,哎,看到了,所以呢,这就达到了一个什么目的,即使我们消息发布到这个队列,我们依然可以进行回退处理。保证了消息不丢失。这个呢,就是我们这个叫发布确认的啊,高级内容。高级内容。咱们结果啊,结果跟这个一样的啊,高级内容。
我来说两句