没有合适的资源?快使用搜索试试~ 我知道了~
RabbitMQ如何防止数据丢失?
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 4 下载量 149 浏览量
2021-01-07
15:38:18
上传
评论 1
收藏 74KB PDF 举报
温馨提示
可能丢失数据的位置 1.生产者丢失数据? 解决方案: RabbitMQ提供了transaction和cofirm模式来确保生产者不丢消息. tansaction机制就是说: 发送消息前开启事务(channel.txSelect()), 然后发送消息, 如果发送过程中出现什么异常,事务就会回滚(channel.txRollback()), 如果发送成功提交事务(channel.txCommit()). 然而缺点就是吞吐量下降了. 因此,生产上用confirm模式的居多, 开启confirm模式:#消息发送确认 rabbitMQ: publisher-confirms: true #消息消费
资源推荐
资源详情
资源评论
RabbitMQ如何防止数据丢失如何防止数据丢失?
可能丢失数据的位置可能丢失数据的位置
1.生产者丢失数据生产者丢失数据?
解决方案解决方案:
RabbitMQ提供了transaction和cofirm模式来确保生产者不丢消息.
tansaction机制就是说:
发送消息前开启事务(channel.txSelect()), 然后发送消息,
如果发送过程中出现什么异常,事务就会回滚(channel.txRollback()),
如果发送成功提交事务(channel.txCommit()).
然而缺点就是吞吐量下降了缺点就是吞吐量下降了.
因此因此,生产上用生产上用confirm模式的居多模式的居多,
开启confirm模式:#消息发送确认
rabbitMQ:
publisher-confirms: true
#消息消费确认
template:
mandatory: true
一旦channel进入了confirm模式,所有在该信道上面发布的消息都将会被指派一个唯一的ID(从1开始),一旦消息被投递到所有匹
配的队列之后,rabbitMQ就会发送一个ACK给生产者(包含消息的唯一ID),这样就使得生产者知道消息已经到达目的队列中,如果
rabbitMQ没能处理该消息,则会发送一个Nack消息给你,你可以进行重试操作. CorrelationData correlationData = new
CorrelationData(UUID.randomUUID().toString());//唯一标识符
rabbitTemplate.convertAndSend(attachMap.get("exchange"), attachMap.get("routingkey"), JSON.toJSONString(resultMap), correlationData);
2.MQ宕机数据丢失宕机数据丢失?
解决方案解决方案:
处理消息队列丢失的情况,一般是开启持久化磁盘的配置,
将将durable设置为设置为true;
@Bean
public Exchange orderSeckillExchange(){
return new DirectExchange(env.getProperty("交换机名称"),true,false);//开启持久化磁盘
}
这个持久化配置可以和confirm机制配合使用,你可以在消息持久化磁盘后,再给生产者发送一个Ack信号,这样,如果消息持久化磁
盘之前,rabbitMQ阵亡了,那么生产者收不到Ack信号,生产者会自动重拨.
3.消费者网络中断数据丢失消费者网络中断数据丢失?
rabbitMQ如果丢失了数据,主要是因为你消费的时候,刚消费到,还没处理,结果进程挂了,那就很尴尬,rabbitMQ认为你已经消费了,
这样数据就丢失了.
解决方案解决方案:
启用手动确认模式可以解决这个问题
(
重试机制
)
手动确认模式
,如果消费者来不及处理就死掉时,没有响应ack时会重复发送一条
weixin_38721565
- 粉丝: 3
- 资源: 916
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页