RabbitMQ消息消费失败问题解析

1.前提

  • 通过RabbitMQ的延时交换器插件实现消息延时触发,延时结束后消息push到队列,消费者开始消费消息。
  • 我们项目中的商城模块待支付订单超时修改订单状态为已失效的功能就是通过以上逻辑实现。
  • 消息消费完成后采用的是手动ack的方式

2.问题描述

  • 生产者产生消息正常,通过日志可以证明
    在这里插入图片描述
  • 消费者一直监听不到消息导致超时的订单状态未能及时变更
    在这里插入图片描述

3.问题分析一: 交换器和队列之间没有绑定关系,或者绑定关系错误

  • 通过mq的管理后台进入队列查看绑定关系
    在这里插入图片描述
  • 查看是否存在绑定关系
    在这里插入图片描述
备注:
	我出现问题的点是队列和交换器没有绑定关系,导致交换器不知道该把消息路由到哪个队列
	我手动添加了交换器和队列的绑定关系,再次下单,业务就正常了

在这里插入图片描述

4.问题分析二:消息消费者未对消息进行确认,导致消息在队列中阻塞

  • 查看队列中消息的情况,发现队列确实处于阻塞状态
    在这里插入图片描述
  • 查看消费端代码逻辑发现手动确认的方式存在问题,只对个别情况做了确认,其余的情况未做确认
  • 图片一是之前的确认方式(注释掉的代码)
    在这里插入图片描述
  • 我将手动确认放在了消费端业务的最下边(catch的上一行代码)
    在这里插入图片描述

5.总结

我们在使用RabbitMQ是消费者监听不到消息或者消费端未能正常执行业务一般是如下原因导致:
1. 消息队列阻塞
2. 交换器和队列没有绑定关系或者绑定关系有问题
3. 在消息正常确认的情况下为了避免队列阻塞,我们一般会同时使用死性队列,让异常的消息进入死性队列,避免
   业务队列阻塞
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值