从RabbitMQ的3.6.0版本开始,就增加了Lazy Queues的概念,也就是惰性队列。惰性队列的特征如下:

  • 接收到消息后直接存入磁盘而非内存

  • 消费者要消费消息时才会从磁盘中读取并加载到内存

  • 支持数百万条的消息存储

解决消息堆积有两种思路:

  • 增加更多消费者,提高消费速度。也就是我们之前说的work queue模式

  • 扩大队列容积,提高堆积上限;要提升队列容积,把消息保存在内存中显然是不行的。

========================

基于命令行设置lazy-queue

而要设置一个队列为惰性队列,只需要在声明队列时,指定x-queue-mode属性为lazy即可。可以通过命令行将一个运行中的队列修改为惰性队列:

rabbitmqctl set_policy Lazy "^lazy-queue$" '{"queue-mode":"lazy"}' --apply-to queues  

命令解读:

  • rabbitmqctl :RabbitMQ的命令行工具

  • set_policy :添加一个策略

  • Lazy :策略名称,可以自定义

  • "^lazy-queue$" :用正则表达式匹配队列的名字

  • '{"queue-mode":"lazy"}' :设置队列模式为lazy模式

  • --apply-to queues:策略的作用对象,是所有的队列

========================================

基于@Bean声明lazy-queue

@Bean
public Queue lazyQueue() {return QueueBuilder.durable("lazy.queue").lazy().build();
}
@RabbitListener(queuesToDeclare = @Queue(name = "lazy.queue", durable = "true",arguments = @Argument(name = "x-queue-mode", value = "lazy")
))
public void listenDlQueue2(String msg) {log.info("接收到 dl.ttl.queue的延迟消息:{}", msg);
}

====================

消息堆积问题的解决方案?

  • 队列上绑定多个消费者,提高消费速度

  • 使用惰性队列,可以再mq中保存更多消息

惰性队列的优点有哪些?

  • 基于磁盘存储,消息上限高

  • 没有间歇性的page-out,性能比较稳定

惰性队列的缺点有哪些?

  • 基于磁盘存储,消息时效性会降低

  • 性能受限于磁盘的IO

RabbitMq高级惰性列队相关推荐

  1. RabbitMQ(二):RabbitMQ高级特性

    RabbitMQ(二):RabbitMQ高级特性 RabbitMQ是目前非常热门的一款消息中间件,不管是互联网大厂还是中小企业都在大量使用.作为一名合格的开发者,有必要了解一下相关知识,RabbitM ...

  2. RabbitMQ 高级指南:从配置、使用到高可用集群搭建

    博主说:在项目中,通过 RabbitMQ,咱们可以将一些无需即时返回且耗时的操作提取出来,进行异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量. 正文 1 Rab ...

  3. RabbitMQ 高级特性(吐血猝死整理篇)

    文章目录 RabbitMQ 高级特性 消息可靠性投递(可靠性发送) 事务机制 代码实现 发送方确认机制 为什么比事务性能好 示例代码 测试一下QPS 持久化存储 TTL 队列 死信队列(DLX) 延迟 ...

  4. RabbitMQ高级特性-惰性队列

    目录 一.消息堆积问题 二.解决消息堆积的三种思路 三.惰性队列 1.命令行修改惰性队列 2.用SpringAMQP声明惰性队列 @Bean的方式 注解方式 测试发送消息 3.惰性队列的优点 4.惰性 ...

  5. RabbitMQ之惰性队列(Lazy Queue)

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  6. 3 RabbitMQ高级特性 3

    主要为大家讲解RabbitMQ的高级特性和实际场景应用, 包括消息如何保障 100% 的投递成功 ? 幂等性概念详解,在海量订单产生的业务高峰期,如何避免消息的重复消费问题? Confirm确认消息. ...

  7. RabbitMQ高级特性

    文章目录 1. 简述 2. 特性示例: 2.1 消息可靠性投递 2.2 Consumer Ack 2.3 消费端限流 2.4 TTL 2.5 死信队列 2.6 延迟队列 1. 简述 在rabbitMQ ...

  8. RabbitMQ高级之如何保证消息可靠性?

    楔子 本篇是消息队列RabbitMQ的第四弹. RabbitMQ我已经写了三篇了,基础的收发消息和基础的概念我都已经写了,学任何东西都是这样,先基础的上手能用,然后遇到问题再去解决,无法理解就去深入源 ...

  9. 分享笔记RabbitMQ高级之消息限流与延时队列

    楔子 本篇是消息队列RabbitMQ的第五弹. 上篇本来打算讲述RabbitMQ的一些高级用法: 如何保证消息的可靠性? 消息队列如何进行限流? 如何设置延时队列进行延时消费? 最终因为篇幅缘故,上篇 ...

最新文章

  1. C语言:简单而不易懂的声明(二)
  2. 好好学python·基本数据类型
  3. 基于动态IP的Internet视频监控解决方案(作者:吴晓晖)
  4. 用redis实现消息队列
  5. 美检方或起诉刘强东;百度对呛微信规则;澳洲调查 Facebook | 极客头条
  6. Vue Cli 打包之后静态资源路径不对的解决方法
  7. OpenCV(三) 图像的读取和显示
  8. [C#]巧妙获取正在使用的IPv4地址
  9. java jad_Java反编译工具 jad安装及使用的指南
  10. 写在发现谷歌拼音输入法网站消失的今天
  11. mysql to sqlserver_mysql to sqlserver
  12. MySQLzip格式安装包
  13. 群控 云控营销神器代码研究
  14. ch341a编程和ttl刷机区别_USB转TTL(CH341A)的注意事项及说明 -
  15. python-opencv文件夹中所有视频按顺序截图片并按顺序命名
  16. 用户画像如何分析 用户画像如何获取
  17. atm系统的用例模型_ATM自动取款机用例图.doc-_装配图网
  18. SonarQube在Windows环境下下载安装,中文包下载安装,mysql配置,maven配置,idea配置,项目配置
  19. 第 338 场周赛 (力扣周赛)
  20. .net fileupload批量上传可删除_8uftp上传工具,8uftp上传工具的使用方法只需8步

热门文章

  1. 同期群分析是什么?教你用 SQL 来搞定
  2. MySQL 使用 B+ 树的研究
  3. PMCAFF转载——网易云课堂产品研习
  4. HTML——3D移动、3D透视、3D效果、3D呈现案例效果
  5. 由一个误操作引起的对linux下mv命令的使用总结
  6. 美国媒体称互联网不能成为低级趣味天堂
  7. 六、文件管理(1.文件和文件系统)
  8. 如何将Jenkins基础环境迁移到Docker?
  9. 拼多多远程删除用户照片事件
  10. ubuntu 18.04 安装postgre+postgis+pgadmin3+导入shapefile