mq系列文章

对mq了解不是很多的,可以看一下下面两篇文章:

  1. 聊聊mq的使用场景
  2. 聊聊业务系统中投递消息到mq的几种方式
  3. 聊聊消息消费的几种方式
  4. 如何确保消息至少消费一次
  5. 如何保证消息消费的幂等性

本章内容

从消费者的角度出发,分析一下消息消费的两种方式:

  1. push方式
  2. pull方式

push方式

消息消费的过程:

  1. mq接收到消息

  2. mq主动将消息推送给消费者(消费者需提供一个消费接口)

mq属于主动方,消费者属于一种被动消费,一旦有消息到达mq,会触发mq推送机制,将消息推送给消费者,不管消费者处于何种状态。

优点:

  1. 消费者代码较少:对于消费者来说,只需提供一个消费接口给mq即可;mq将接收到的消息,随即推送到指定的消费接口

  2. 消息实时性比较高:对于消费者来说,消息一旦到达mq,mq会立即推送给消费者

缺点:

1.消费者属于被动方,消息量比较大时,对消费者性能要求比较高;若消费者机器资源有限,可能会导致压力过载,引发宕机的情况。

2.对消费者可用性要求比较高:当消费者不可用时,会导致很push失败,在mq方需要考虑至少推送成功一次,这块的设计下章节会做说明。

pull方式

消息消费的过程:

1.消费端采用轮询的方式,从mq服务中拉取消息进行消费

2.消费完成通知mq删除已消费成功的消息

3.继续拉取消息消费

对于消费者来说,是主动方,可以采用线程池的方式,根据机器的性能来增加或缩小线程池的大小,控制拉取消息的速度,可以很好的控制自身的压力。

优点:

1.消费者可以根据自己的性能主动控制消息拉去的速度,控制自己的压力,不至于把自己弄跨

2.实时性相对于push方式会低一些

3.消费者属于主动方,控制权更大一些

缺点:

1.消费方需要实现消息拉取的代码

2.消费速度较慢时,可能导致mq中消息积压,消息消费延迟等

总结

  1. 消费者性能较好,对实时性要求比较高的,可以采用push的方式

  2. 消费者性能有限,建议采用pull的方式

  3. 整体上来说,主要在于消费者的性能,机器的性能如果没有问题,push和pull都是可以的

  4. 大家有什么看法,可以留言一起讨论,希望本文对你有所帮助

最新文章

  1. python引用py文件中文报错
  2. win7双系统安装ubuntu并配置常用软件
  3. Postgres-enum
  4. IOS7 ~ Xcode5 制作 framework
  5. 如何把maven项目转成web项目
  6. zeromq 学习和python实战
  7. web字体
  8. nenu contest3
  9. Java 多字段排序Comparator(兼容Date,Integer,Doubel,Long)
  10. LNMP源码编译安装
  11. Windows Server 2016-图形化备份域控制器
  12. Winform开发框架中工作流模块的动态处理
  13. django websocket
  14. 第10章 嵌入式Linux 的调试技术
  15. Android 开发 框架系列 百度语音合成
  16. [20171225]没有备份数据文件的恢复.txt
  17. Angularjs 根据数据结构创建动态菜单无限嵌套循环--指令版
  18. Luogu P1533 可怜的狗狗
  19. Rockchip parameter文件详解
  20. objective-C 的内存管理之-实例分析

热门文章

  1. 《The Swift Programming Language》的笔记-第28页
  2. mouseout和mouseover、mouseenter和mouseleave
  3. Vue常用语法及命令
  4. java8--网络编程(java疯狂讲义3复习笔记)
  5. JavaScript对象(复习笔记)
  6. jetty9 web app的部署
  7. C++ 多线程与并发
  8. 稳定婚姻(tarjan)
  9. 小程序-demo:快速开始
  10. ChartCtrl源码剖析之——CChartScrollBar类