1)生产者弄丢了数据

生产者将数据发送到rabbitmq的时候,可能数据就在半路给搞丢了,因为网络啥的问题,都有可能。

解决:

RabbitMQ提供transaction和confirm模式来确保生产者不丢消息。transaction机制就是说,发送消息前
开启事物(channel.txSelect()),然后发送消息,如果发送过程中出现什么异常,
事物就会回滚(channel.txRollback()),如果发送成功则提交事物(channel.txCommit())。然而缺点就是吞吐量下降了。
因此,生产上用confirm模式的居多。一旦channel进入confirm模式,所有在该信道上面发布的消息都将会被指派一个唯一的ID(从1开始),
一旦消息被投递到所有匹配的队列之后,rabbitMQ就会发送一个Ack给生产者(包含消息的唯一ID),
这就使得生产者知道消息已经正确到达目的队列了.如果rabiitMQ没能处理该消息,则会发送一个Nack消息给你,你可以进行重试操作。

2)rabbitmq弄丢了数据

就是rabbitmq自己弄丢了数据,这个你必须开启rabbitmq的持久化,就是消息写入之后会持久化到磁盘,
哪怕是rabbitmq自己挂了,恢复之后会自动读取之前存储的数据,一般数据不会丢
。除非极其罕见的是,rabbitmq还没持久化,自己就挂了,可能导致少量数据会丢失的,但是这个概率较小。

设置持久化:

MQ丢失数据:
交找机持久化、channel.exchangeDeclare(exchange_name,”topic”,true);
声明交换机、指定类型为topic、设为true
队列持久化、channel.queueDeclare(QUEUE_NAME,true,false,false,null);
声明队列、第二个为true
消自持久化、channel.basicPublish(exchange_name,”item.update”,MessageProperties.PERSISTENT_TEXT_PLAIN,MESSAGE.GETbYTES());
MESSAGEPROPER...为持久化

解决:

处理消息队列丢数据的情况,一般是开启持久化磁盘的配置。这个持久化配置可以和confirm机制配合使用,
你可以在消息持久化磁盘后,再给生产者发送一个Ack信号。
这样,如果消息持久化磁盘之前,rabbitMQ阵亡了,那么生产者收不到Ack信号,生产者会自动重发。

3)消费端弄丢了数据

rabbitmq如果丢失了数据,主要是因为你消费的时候,刚消费到,还没处理,
结果进程挂了,比如重启了,那么就尴尬了,rabbitmq认为你都消费了,这数据就丢了。

解决:

启用手动确认模式可以解决这个问题(重试机制)
手动确认模式,如果消费者来不及处理就死掉时,没有响应ack时会重复发送一条信息给其他消费者;
如果监听程序处理异常了,且未对异常进行捕获,会一直重复接收消息,然后一直抛异常;
如果对异常进行了捕获,但是没有在finally里ack,也会一直重复发送消息(重试机制)。

解决RabbitMQ数据丢失相关推荐

  1. 解决RabbitMQ消息丢失与重复消费问题

    解决RabbitMQ消息丢失与重复消费问题 参考文章: (1)解决RabbitMQ消息丢失与重复消费问题 (2)https://www.cnblogs.com/sessionbest/articles ...

  2. 解决RabbitMQ保错 Error: unable to connect to node rabbit@localhost: nodedown

    解决RabbitMQ保错 Error: unable to connect to node rabbit@localhost: nodedown 查询mq的进程 ps -ef | grep rabbi ...

  3. rabbitmq可靠性投递_解决RabbitMQ消息丢失问题和保证消息可靠性(一)

    工作中经常用到消息中间件来解决系统间的解耦问题或者高并发消峰问题,但是消息的可靠性如何保证一直是个很大的问题,什么情况下消息就不见了?如何防止消息丢失?下面通过这篇文章,我们就聊聊RabbitMQ 消 ...

  4. 解决RabbitMQ service is already present - only up...

    2019独角兽企业重金招聘Python工程师标准>>> C:\Users\Administrator>rabbitmq-service install RabbitMQ ser ...

  5. 解决rabbitmq收到消息打印告警消息

    现象:收到消息会打印告警消息::Could not convert incoming message with content-type [null] 解决: RabbitMQ已经实现了Jackson ...

  6. (转)解决RabbitMQ service is already present - only updating service parameters

    C:\Users\Administrator>rabbitmq-service install RabbitMQ service is already present - only updati ...

  7. RabbitMQ:Plugin configuration unchanged;解决RabbitMQ启动问题,Win10用户中文问题解决

    首先MQ是什么? MQ是Message Queue消息队列的缩写.消息队列是一种应用程序对应用程序的通信方法.应用程序通过写和检索入列队的针对应用程序的数据(消息)来进行通信,而不需要专用连接来链接它 ...

  8. 离线解决Rabbitmq启动报“line 80: erl: command not found”

    问题描述: 部署一套新环境,因为该环境的机器规定不能连外网,rabbitmq采用离线部署的方式. 将本地yum下载的rabbitmq所需rpm包手动上传到该环境的机器离线部署.所有的rpm包都和本地在 ...

  9. 解决rabbitmq add_user 报错

    rabbitmq 安装完成之后 会有个可执行文件 rabbitmqctl 通过这个可执行文件去添加用户,报错 报错情况如下: $ rabbitmqctl add_user seabed seabed ...

最新文章

  1. 讨论JDK的File.equal()
  2. 2519485c7dcfe0295a41d4e0f69bb10a 求解
  3. c++卸载工具_win7系统如何卸载office2007兼容包
  4. CSS中调用JS函数和变量
  5. WinMerge 操作界面汉语版(截图),以及简单功能介绍
  6. Prototype实例代码推荐
  7. 外卖类应用的竞争与趋势
  8. Jenkins修改插件下载地址
  9. Gradle使用教程
  10. Matlab学习笔记 kron函数
  11. 《阴阳师·3黑川主》原作:梦枕貘
  12. Cortana 设备建议
  13. 蚂蚁金服副总裁蒋国飞:技术全面开放,与合作伙伴共发展
  14. 网易云催生云计算更多可能性
  15. 【推免】笔试+机试+面试 准备
  16. [转]社区运营必读之天涯志
  17. 全面深改直面民生“硬骨头” 这些领域获得感满满
  18. java.lang.IllegalStateException: getWriter() has already been called for this response问题解决
  19. Raphael.js简易教程
  20. 最新JAVA编程题全集(50题及答案)

热门文章

  1. JAVA解析xml报文
  2. python使用input输入数组
  3. 《国民教育大考察》百度应用创新大奖赛 游戏类 二等奖
  4. Docker踩坑记录
  5. 【CSS】450- 温故而知我不懂的CSS
  6. 【端午节特别活动】在 Python 中制作端午节游戏
  7. 如何删除计算机中常用列表,win7右键新建菜单如何删除一些不常用的选项
  8. python随机密码生成以整数17为随机数种子_Python 随机数 random
  9. mysql8.0JDBC驱动下载以及JDBC连接时遇到的问题
  10. 2022中国居民退休准备指数为5.7,青年群体希望提早退休,居民对个人养老金制度缺乏了解但普遍支持 | 美通社头条...