消息队列在使用中的注意事项
时间:2022-05-03
本文章向大家介绍消息队列在使用中的注意事项,主要内容包括消息队列在使用中的注意事项、总结、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
消息队列在使用中的注意事项
异步不是万能的,实现异步重要的手段,消息队列在使用中也是有很多注意事项的。
消息队列的瓶颈
消息队列至少有三处容易出现瓶颈,我们一经典的发布/订阅模式为例。分析一下都可能存在哪些瓶颈。
发布 ---> 队列 ---> 订阅
- 入队瓶颈,发布消息队列,处理太慢,发布端堵塞应用程序。
- 队列持久化瓶颈,队列持久化是需要写入磁盘的,大量的密集IO操作
- 出队瓶颈,(茶壶煮饺子,有嘴倒不出)出队瓶颈还包括订阅端的处理能力,
- 如果订阅端的处理能力跟不上,也会出现瓶颈。
发布端常见问题
发布端问题表现在入队速度影响了发布端应用程序的性能,例如
runtime {
task1();
task2();
publish();
task3();
task4();
}
loop {
task1();
task2();
publish();
task3();
task4();
}
上面伪代码 publish()将阻塞 task3()与task4(),必须等待publish()执行完成才能继续运行。
这样的情况是 发布数量 > 入队的速度, 影响发布端的性能
队列持久化
消息的持久化,既影响入队速度,也影响出对速度,入队是写磁盘操作,出对是修改或者删除操作。 在队列同时进行入队与出队的操作是,还涉及到各种“锁”,例如线程锁与文件锁等等。 最终结果是消息队列性能骤降。
订阅端性能
订阅端的处理能力也影响到队列的堆积程度。如果订阅端处理速度过慢,我们就会发现消息在队列中堆积。
loop {
function sub_callback(){
task1();
task2();
task3();
task4();
}
}
订阅端改进,将队列交给线程处理
threads[max_connet] {
function sub_callback(){
task1();
task2();
task3();
task4();
}
}
总结
我们要尽量做到发布,队列与订阅之间的平衡,才能发挥消息队列的优势。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- TCP/IP详解 -奠基篇
- 段错误?打的就是段错误!!
- (Graph)图,挑着看看
- Mybatis学习笔记(四)调用存储过程
- 跟我一起 自己种一颗 AVL树(平衡二叉搜索树)吧!
- mybatis文件映射之利用collection定义关联集合(五)
- 【奇技淫巧】 -- 原地旋转数组
- mybatis文件映射之利用延迟加载解决collection分布查询(六)
- 【C++】攻克哈希表(unordered_map)
- 位图原理及实现 - 海量数据处理标配
- mybatis文件映射之利分布查询时传递多列值 (七)
- 位运算 - 初见
- Mybatis学习笔记(一)
- mybatis文件映射之鉴别器discriminator标签
- LeetCode刷题总结 -- 链表篇