当前位置:   article > 正文

rabbitmq如何保证消息不丢失

rabbitmq如何保证消息不丢失

丢数据的三个场景:生产者丢失,mq自己丢失,消费者丢失

  • 生产者丢失:
  1. 第一种消息发送前开启事务,发生异常就回滚事务
  2. 第二种开启confirm模式,每次写得消息都会分配一个唯一的id,写入mq之后会回传acK消息,失败回调用nack接口,可以根据这重新处理这个消息

两种处理方式的区别:事务机制是同步的,提交一个事务会阻塞的,而confirm机制是异步的,发送消息之后还能发送下一个消息,一般使用confirm 机制

  • mq丢失:

消息队列和交换机持久化,并且发送消息的是deliveryMode 设置为2(1是不持久化)

  •   消费者丢失:

使用rabbitmq提供的ack机制,首先关闭rabbitmq的自动ack,然后每次在确保处理完这个消息之后,在代码里手动调用ack。这样就可以避免消息还没有处理完就ack。

spring-cloud-stream 整合依赖

  1. // javax.el
  2. compile ('org.glassfish.web:javax.el:2.2.4') {
  3. exclude group: 'javax.el', module: 'javax.el-api'
  4. }
  5. //rabbitmq
  6. compile 'org.springframework.cloud:spring-cloud-starter-stream-rabbit'
  7. compile 'org.springframework.cloud:spring-cloud-stream'

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/1019025
推荐阅读
相关标签
  

闽ICP备14008679号