RabbitMQ消息消费时的权衡

消息的持久化是交换器、队列、消息 三者的持久化才能成为消息的持久化。

Qos 预取模式

事务模式

消息消费的拒绝

消息的拒绝方式

  • Reject(只能单条拒绝)
//TODO Reject方式拒绝(这里第2个参数决定是否重新投递)
// 第一个参数:nvelope.getDeliveryTag() 信封里标识每条信息的ID
// 第二个参数:true为重新投递,false为丢弃消息
channel.basicReject(envelope.getDeliveryTag(),true);
  • Nack(可以批次拒绝,也可以单条拒绝)
//TODO Nack方式的拒绝()
//第一个参数同上
//第2个参数决定是否批量
//第三个参数决定是否重新投递,true代表可以重新投递,false会丢弃消息
channel.basicNack(envelope.getDeliveryTag(), false, false);

死信交换器DLX(死了的消息)

死了的消息主要有:过期、队列达到最大长度、拒绝且requeue=false
如果队列达到最大的长度,根据队列先进先出的特性,最老的那条(最先进去的)会成为为死信消息

备用交换器与死信交换器的关系

备用交换器----死信交换器

  • 备用交换器指消息还没有进入到队列的情况,生产者往Rabbit中去发消息,备用交换器可以给消息兜底(消息会被消费)(保证生产者消息不会丢失)
  • 死信交换器指消息到了正常的队列,消费者拒绝了该消息,同时又设置不能发生重新投递(一般情况下,保证消费者消息不会丢失)

队列的控制

  • 临时队列(存储内存中)没有持久化的队列

    • 自动删除队列(自动删除队列判断的条件:消费者断开)
    • 单消费者队列(消息会被独占,不会采取轮询)
    • 自动过期队列
      自动过期队列(从什么时候开始算起)
      1、队列中没有GET操作
      2、队列中没有consumer消费者连上去
  • 持久化队列(内存中也有,数据存在磁盘)

消息消费时的权衡------总结

  • 消费者主要关注队列
  • 消费者一般使用推送
  • 死信交换器结合消息过期机制一般用在“限时订单”业务场景
  • 批量机制可以极大提升性能
  • 事务机制一般会被遗弃
  • 单队列一般用于顺序消息,但是也丧失了高性能
  • 消费者遇到异常不用慌,各种机制来护航
    消息重新投递、死信交换器、消息丢弃

四、RabbitMQ消息消费时的权衡相关推荐

  1. 三、RabbitMQ消息发布时的权衡

    目录标题 RabbitMQ消息发布时的权衡 失败通知 消息发布时的权衡: 加入事务 发送方确认 备用交换器 总结 RabbitMQ消息发布时的权衡 失败通知 mandatory 消息发布时的权衡: 加 ...

  2. 如何保证消息不被重复消费啊(如何保证消息消费时的幂等性)?

    1.面试题 如何保证消息不被重复消费啊(如何保证消息消费时的幂等性)? 2.面试官心里分析 其实这个很常见的一个问题,这俩问题基本可以连起来问.既然是消费消息,那肯定要考虑考虑会不会重复消费?能不能避 ...

  3. rocketmq存储消息mysql_RocketMQ消息消费以及进度管理解析

    最近 ONS 消息堆积的很严重,并且经常发现部分几乎没有消息消费的消费者也提示堆积,所以有必要深入了解一下 RocketMQ 的设计思路,来看看堆积量如何计算,以及如何正确的使用 Topic 以及 C ...

  4. kafka消息消费有延迟_消息中间件选型分析---从Kafka与RabbitMQ的对比来看全局

    有很多网友留言:公司要做消息中间件选型,该如何选?你觉得哪个比较好?消息选型的确是一个大论题,实则说来话长的事情又如何长话短说.对此笔者专门撰稿一篇内功心法:如何看待消息中间件的选型,不过这篇只表其意 ...

  5. 四种策略确保 RabbitMQ 消息发送可靠性!你用哪种?

    微服务可以设计成消息驱动的微服务,响应式系统也可以基于消息中间件来做,从这个角度来说,在互联网应用开发中,消息中间件真的是太重要了. 今天,以 RabbitMQ 为例,松哥来和大家聊一聊消息中间消息发 ...

  6. Rabbitmq消息可靠投递和重复消费等问题解决方案

    消息的可靠性投递 在一些对数据一致性要求较高的业务场景里面,如果消息在发布和消费过程中出现了问题(消息丢失,消息重复消费),就会导致数据不一致,要做到消息的可靠性投递. 在RabbitMq里面提供了很 ...

  7. RabbitMQ消息重复消费问题

    业务背景 消息队列在数据传输的过程中,为了保证消息传递的可靠性,一般会对消息采用ack确认机制,如果消息传递失败,消息队列会进行重试,此时便可能存在消息重复消费的问题. 比如,用户到银行取钱后会收到扣 ...

  8. (四)RabbitMQ消息队列-服务详细配置与日常监控管理

    (四)RabbitMQ消息队列-服务详细配置与日常监控管理 原文:(四)RabbitMQ消息队列-服务详细配置与日常监控管理 RabbitMQ服务管理 启动服务:rabbitmq-server -de ...

  9. RabbitMq 消息接收确认(可靠消费)

    RabbitMq 消息接收确认(可靠消费) 一.消息接收确认是什么: 是RabbitMq确认消息是否成功被消费的一种机制. 有三种消息确认方式: 1.none代表不确认:该模式下,只要队列获取到了消息 ...

最新文章

  1. 自动驾驶多模态传感器融合的综述
  2. hadoop job 未跑满资源_2018年第26周-解剖MapReduce Job
  3. 亚马逊推出VR/AR开发平台Sumerian,功能强大不同于Poly
  4. SQL数据库权限授予grant
  5. 【渝粤题库】广东开放大学 文化产业经济学 形成性考核
  6. qt linux opensource ,QT opensource embedded linux 编…
  7. java clone原理_详解Java中的clone方法 -- 原型模式
  8. 干货分享|安全测试起航之旅 1
  9. 微信发布诱导违规APP处理公告:这次被点名的大家都认识
  10. Apache 回应:参与开源不受 EAR 约束
  11. vue 释放内存_13 道由浅入深的 Vue 自测题
  12. http://jingyan.baidu.com/article/fcb5aff78e6a48edab4a7146.html
  13. 九大厂商联合推出「快应用」,围攻微信?
  14. mit的java教材_关于学习MIT6.828操作系统课程lab1记录
  15. 在几何画板中如何制作圆柱的侧面展开动画_几何画板制作圆柱体的形成动画演示方法...
  16. 【Android智能硬件开发】【004】通过PackageInstaller静默安装apk
  17. 存储服务器 自建,搭建及了解存储服务器
  18. Python词云_自定义图片做背景
  19. 分门别类刷leetcode——链表
  20. 不懂就问,苹果电脑格式化了能恢复数据吗?

热门文章

  1. mfc之使用控制台Console输出调试信息
  2. linux系统shell脚本编程,Linux系统shell脚本编程(一)
  3. OpenCV adaptiveThreshold 自适应阈值
  4. Linux学习-11月13日(PHP安装)
  5. 前端开发-家里蹲工作环境搭建
  6. O(1) O(n)
  7. cisco路由器基本实验之六 CHAP and RIP (Boson NetSim)
  8. 《高可用架构·中国初创故事(第3期)》一2.5 指导
  9. 【Computer Organization笔记10】单周期CPU设计:基于7条MIPS指令的数据通路
  10. Laravel 学习笔记5.3之 Query Builder 源码解析(下)