聊聊mq中消息消费的几种方式
mq系列文章
对mq了解不是很多的,可以看一下下面两篇文章:
- 聊聊mq的使用场景
- 聊聊业务系统中投递消息到mq的几种方式
- 聊聊消息消费的几种方式
- 如何确保消息至少消费一次
- 如何保证消息消费的幂等性
本章内容
从消费者的角度出发,分析一下消息消费的两种方式:
- push方式
- pull方式
push方式
消息消费的过程:
mq接收到消息
mq主动将消息推送给消费者(消费者需提供一个消费接口)
mq属于主动方,消费者属于一种被动消费,一旦有消息到达mq,会触发mq推送机制,将消息推送给消费者,不管消费者处于何种状态。
优点:
消费者代码较少:对于消费者来说,只需提供一个消费接口给mq即可;mq将接收到的消息,随即推送到指定的消费接口
消息实时性比较高:对于消费者来说,消息一旦到达mq,mq会立即推送给消费者
缺点:
1.消费者属于被动方,消息量比较大时,对消费者性能要求比较高;若消费者机器资源有限,可能会导致压力过载,引发宕机的情况。
2.对消费者可用性要求比较高:当消费者不可用时,会导致很push失败,在mq方需要考虑至少推送成功一次,这块的设计下章节会做说明。
pull方式
消息消费的过程:
1.消费端采用轮询的方式,从mq服务中拉取消息进行消费
2.消费完成通知mq删除已消费成功的消息
3.继续拉取消息消费
对于消费者来说,是主动方,可以采用线程池的方式,根据机器的性能来增加或缩小线程池的大小,控制拉取消息的速度,可以很好的控制自身的压力。
优点:
1.消费者可以根据自己的性能主动控制消息拉去的速度,控制自己的压力,不至于把自己弄跨
2.实时性相对于push方式会低一些
3.消费者属于主动方,控制权更大一些
缺点:
1.消费方需要实现消息拉取的代码
2.消费速度较慢时,可能导致mq中消息积压,消息消费延迟等
总结
消费者性能较好,对实时性要求比较高的,可以采用push的方式
消费者性能有限,建议采用pull的方式
整体上来说,主要在于消费者的性能,机器的性能如果没有问题,push和pull都是可以的
大家有什么看法,可以留言一起讨论,希望本文对你有所帮助
聊聊mq中消息消费的几种方式的更多相关文章
- linux内核分析作业4:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
系统调用:库函数封装了系统调用,通过库函数和系统调用打交道 用户态:低级别执行状态,代码的掌控范围会受到限制. 内核态:高执行级别,代码可移植性特权指令,访问任意物理地址 为什么划分级别:如果全部特权 ...
- JavaScript学习12 JS中定义对象的几种方式
JavaScript学习12 JS中定义对象的几种方式 JavaScript中没有类的概念,只有对象. 在JavaScript中定义对象可以采用以下几种方式: 1.基于已有对象扩充其属性和方法 2.工 ...
- Shell脚本中执行mysql的几种方式(转)
Shell脚本中执行mysql的几种方式(转) 对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用 ...
- Java中HashMap遍历的两种方式
Java中HashMap遍历的两种方式 转]Java中HashMap遍历的两种方式原文地址: http://www.javaweb.cc/language/java/032291.shtml 第一种: ...
- JAVA中集合输出的四种方式
在JAVA中Collection输出有四种方式,分别如下: 一) Iterator输出. 该方式适用于Collection的所有子类. public class Hello { public stat ...
- android中解析文件的三种方式
android中解析文件的三种方式 好久没有动手写点东西了,最近在研究android的相关技术,现在就android中解析文件的三种方式做以下总结.其主要有:SAX(Simple API fo ...
- jQuery中开发插件的两种方式
jQuery中开发插件的两种方式(附Demo) 做web开发的基本上都会用到jQuery,jQuery插件开发两种方式:一种是类扩展的方式开发插件,jQuery添加新的全局函数(jQuery的全局函数 ...
- Struts中的数据处理的三种方式
Struts中的数据处理的三种方式: public class DataAction extends ActionSupport{ @Override public String execute() ...
- JavaScript学习12 JS中定义对象的几种方式【转】
avaScript学习12 JS中定义对象的几种方式 转自: http://www.cnblogs.com/mengdd/p/3697255.html JavaScript中没有类的概念,只有对象. ...
随机推荐
- OTG识别原理
如图1所示,那个是Micro USB的母头,可以清晰看到有5pin,分别是(不分顺序):Vbus.GND.D+.D-.ID.当移动设备,类似手机.平板电脑等要支持OTG功能,就必须使用这个接口,而且电 ...
- web爬虫之登录google paly 商店
我们先打开Google play 首页 ,点击右上角"登陆"button,即跳到登陆页面 每次我要用爬虫的方式来登陆某个站点的时候,我都会先随便输入一个账号password点击登陆 ...
- (WPF)附加属性
<Window x:Class="DeepXAML.MainWindow" xmlns="http://schemas.microsoft.com/winfx/20 ...
- oracle的日期蛋
一切都是扯鸡巴蛋. 在网上查oracle的日期函数用法,得到一大堆语法,林林总总,都是扯鸡巴蛋,没能解决我的问题. 其实,我想写这么一条语句:查找某个日期(不含时分秒)产生或有关的记录.咋写? SQL ...
- 正则表达式ab?c匹配的字符串是?(B)
A:abcd B:abc C:abcbc D:aEbc
- ABAP 创建和调用WebService
1.创建WebService ① SE37创建RFC函数 ② SE80创建企业服务-service provider-existing ABAP object 或SE37-实用程序-创建Web服务 ③ ...
- Package vim is not available, but is referred to by another package及我的vim配置
新安装的ubuntu,先安装vim,但是安装出现 Reading package lists... Done Building dependency tree Reading state inform ...
- wpa_supplicant介绍【转】
本文转载自:https://zhuanlan.zhihu.com/p/24246712 一.什么是wpa_spplicant wpa_supplicant本是开源项目源码,被谷歌修改后加入Androi ...
- 安装oh-my-zsh失败,可按以下方式安装
参考:https://jingyan.baidu.com/article/8065f87fae247e2330249876.html .打开 iTerm21. .下载 : git clone git: ...
- 计算机设计思想 —— 代理(proxy)
0. 理解 两个说着不同母语国家的人想要交流通话,各人说着各自的母语显然是无法沟通的,此时需要一个翻译,一个媒介(medium).中介,或者一个代理(proxy),比如通用的国际语言英语,比如全世界人 ...