RabbitMQ:如何确保消息不丢失?

一,生产者方面

1,生产者开启mq事务(channel.txSelect)。如果发送不成功则会报错,此时可以通过事务来回滚(channel.txRollback),成功收到消息则事务提交(channel.txCommit)。因为
生产者事务是同步的机制,当事务提交后会阻塞在那儿,当吞吐量上来后这种方式会影响性能。
2,开启生产者确认机制。使用confirm机制,confirm是异步形式。生产者发送消息时会给消息添加一个ia,当生产者成功发送消息到mq时,mq会返回一个ack给生产者,生产者收到ack说明
消息发送成功,可以做后续处理。如果mq没能处理生产者发送的消息则会回掉nack方法,生产者可以在这个方法里面重新发送消息。如果超过一定时间还没有接收到回调消息则生产者可以自行重
发消息。

二,MQ方面

1,mq持久化消息。mq消息默认是存放在内存上面的,要保证消息不丢失则需要持久化到磁盘上,这样即使mq宕机了重启后也可以从磁盘上读取到持久化的消息。那么要做到消息持久化,必须满足
一下三个条件:
1)Exchange持久化。
2)Queue持久化。
3)消息持久化发送,设置deliveryMode=2,代表持久化发送。
2,mq采用HAPROXY集群镜像部署模式。说一下三种模式:
1)单节点模式。非集群部署,当节点挂掉了,可能导致业务瘫痪,只能等待服务器恢复。
2)普通模式。消息只存在于当前节点中,不会同步到其他节点。当前节点

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值