SpringCloud Stream 整合 RabbitMQ-DLQ队列

前两篇介绍了SpringCloud Stream整合RabbitMQ、消费失败后重试maxAttempts属性:

一、属性-autoBindDlq

根据SpringCloud官方文档上,RabbitMQ消费者相关属性部分可以找到autoBindDlq:
在这里插入图片描述
可以看到其默认值为false。
接下来实际试验一下:

二、项目

本次就接着上次的项目继续使用,项目完整代码:https://github.com/zrk333/mq-service
只是在上一篇SpringCloud Stream 整合 RabbitMQ-消费失败后重试的基础上进行修改,并沿用消费者消费方法中的异常int i = 1 / 0;

三、修改消费者

1、添加配置

spring.cloud.stream.rabbit.bindings.message-center-input.consumer.autoBindDlq=true

另外分组之前添加过,没有添加的需要添加一下,为了添加dlq队列时更好的分组,下面有截图可以看到

spring.cloud.stream.bindings.message-center-input.group=${spring.application.name}

2、验证

重启消费者,并调用生产者接口发送消息
在这里插入图片描述
依然抛出异常,现在看一下RabbitMQ网页页面:
在这里插入图片描述
可以发现多了一个dlp队列,并且Ready Messages 的值为1,多尝试几次还会增加:
在这里插入图片描述

3、查看dlq队列

点击页面队列名message-center.mq-service-consumer.dlq进入:
在这里插入图片描述
Get messages 部分可以查看当前在dlq队列中存放的消息,可以输入数量(相当于查看几条),点击按钮:
在这里插入图片描述
可以看到消息原封不动保存,现在将代码修复好,并手动尝试重新消费:

4、解决bug并重新验证

注释掉抛异常的代码,重启消费者,页面向下看到Move messages部分:
在这里插入图片描述
可以再输入框中填入目标队列名称(可以从Get messages 部分的Routing Key进行复制),点击按钮,查看页面
在这里插入图片描述
在这里插入图片描述
消费者日志:
在这里插入图片描述
可以看到消费被重新放回message-center.mq-service-consumer队列,并重新消费。

四、补充-插件

假如未装插件,页面如下,此时没有Move Messages按钮
在这里插入图片描述
在这里插入图片描述
按提示需要执行下面命令开启插件,不需要重启rabbitmq

rabbitmq-plugins enable rabbitmq_shovel rabbitmq_shovel_management

在这里插入图片描述
在这里插入图片描述

  • 查看插件命令
rabbitmq-plugins list
  • 启动插件命令
rabbitmq-plugins enable xxx
  • 关闭插件命令
rabbitmq-plugins disable xxx

五、参考链接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章