消息队列如何避免消息丢失的问题

明确可能丢消息的三个阶段:

1.生产者发送消息到broker之间的过程可能会产生数据丢失

(rockerMQ)解决方案:可以采用同步的方式来send发送一个成功的状态,如果成功就表示broker就已经成功接收到了生产者发来的消息,并存储在broker了,如果send消息异常或者非成功返回状态,那么就要生产者就要进行在次发送。

(rabbitmq)      解决方案:使用生产者发送消息确认机制,每当生产者发送mq服务时,监听一个confirmlistener,触发回调状态,根据返回状态进行后续操作。

2.broker储存消息阶段会导致数据丢失

(rockermq同步刷盘)解决方案,写入消息之后,立即通知线程刷盘,返回成功状态

(rockermq异步刷盘)解决方案,消息队列到一定数量之后,写入broker,通知线程刷盘,断电会导致数据丢失

(rockermq集群同步复制)解决方案,主从节点均复制成功,返回成功状态,如果主节点失败了,从节点保存的数据就会复制到主节点上,但会产生大量的延迟,降低了吞吐量。

(rockermq集群的异步复制)解决方案,只要主节点复制成功,就会返回成功状态,但如果主节点损坏,由于从节点没有复制,就会导致了数据丢失

(rabbitmq持久化)消息写入之后,就会持久化到磁盘中,损坏后回复,就会写入磁盘的数据

3.broker发送消息到消费者阶段会导致数据丢失

(采用消费者手动确认消息机制)消费者执行完业务逻辑,返回给ack成功表示给broker,告诉他,我已经消费成功了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值