RabbitMq消息问题的总结

消息丢失类型

发送丢失

1、未到达交换机

2、未到达队列

存储丢失消费丢失
原因

发送过程中网络异常

未开启持久化,MQ宕机却未消费消息接收成功,但未消费成功
解决方案

1、未到达交换机

        ①、开启同步等待,直到超时(阻塞影响性能)

        ②、异步回调,回调ConfirmCallback

2、未到达队列

       异步回调,回调ReturnCallback

开启持久化:

        交换机持久化、

        队列持久化、

        消息持久化(默认开启)

HA集群?

消息补偿机制?

ack消息确认机制

        ①、手动模式,需要在业务中手动发送ack,异常会保留消息

        ②、自动模式,无异常自动确认, 有异常可开启消费失败重试

        ③、关闭,消息接收后删除消息

配置

1、未到达交换机,yaml文件配置

publisher-confirm-type: correlated

参数:simple #同步等待

           correated #异步回调

2、未到达队列

publisher-returns: true

参数:true #调用ReturnCallBack

           false #直接丢弃消息

mq控制面板:交换机和队列属性durability设置为durable

代码:

消息确认机制,ymal文件:

listener:

    simple:

          acknowledge-mode: manual

参数:manual #手动

           auto #自动

           none #关闭

自动模式,开启消息失败重试机制,ymal

acknwledge-mode: auto

retry:

    enabled: true #开启重试

    initial-intervale: 1000 #第一次和第二次尝试传递消息之间的持续时间

    multipiter: 1 #重试间隔

    max-attempts: 3 #最大尝试次数

    max-intervale: 10000, #尝试最长持续时间

    stateless: true #有无状态

消息重复|重复消费

出现场景消息确认-自动消息确认-手动
原因自动提交后网络异常,Mq未确认成功,导致消息重发,继而导致重复消费

1、消费者手动提交前宕机,确认失败,消息保留,

导致消息重复,继而导致重复消费

2、手动提交后网络异常,MQ未确认成功,因异常会保留消息,导致消息重复消费。

解决思路

1、消息需要唯一id,第三方组件保存消息,消费时查询判断是否已经消费。

2、消息需要唯一id,消费者保存消息时,自行判断

同左

仍待修改完善。。。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值