错误理解

之所以将这个标题,定义为错误理解,原因就是无法真正的说服自己;

消息队列的模式有两种pull与push.先说说我之前的理解:

  • pull模式指,客户端连接上broker之后,主动发起方法调用获取远程的结果,说的直白一点就是一次RPC调用,即同步方法调用;
  • push模式:

    客户端与broker建立连接,当有消息进入broker,broker进行消息推送至所有的连接客户端,即异步方法调用;但是真正的实现中broker一般是很难维护这么多长连接,那么它又是如何实现push的呢?

activemq的pull与push模式实现方式

今天有时间,于是打开了activemq 的5.14.x的代码,一探究竟。对于activemq的代码我不作描述,本文主是为了纠正思想。对于消息队列pull与push模式的实现方式如下:

  • pull模式

    客户端(指一个connection,一般情况指一个tcp的连接建立)连接到broker之后,启动一个线程,这个线程的任务就是循环调用方法从broker中拉取相应的消息至本地。如果是同步方法调用获取则将相应的消息存放在本地内存中,当同步方法消费消息时,则从该内存区中直接获取相应的消息进行消费;

  • push模式

    客户端连接到broker之后,启动一个线程,这个线程的任务就是循环调用方法从broker中拉取相应的消息至本地。如果是异步方法调用,则直接调用监听器方法,间接调用业务消费消息的方法,而不使用本地内存进行消息的缓存;所以这里的异步只是客户端的异步,而非broker的主动推送。通过这种方式既能解决多客户端的连接,也能解决类似服务端的push型的消息推送。在互联网中这种实现才具有普便性,因为这种方式即解决了性能问题又解决了异步消息的需求。

通过对于pull与push的模式对比,可以非常清晰的理解如下问题:

  • 为什么在互联网上大吞吐量的消息队列都是采用pull模式,而非broker push模式?
  • 为什么采用broker push模式,由于消费端的性能会影响整个消息队列服务器的性能?
  • 为什么采用broker push模式,容易造成broker的消息积压?

总结

对于网络的理解没有深刻认识,就会造成一种想当然的认识,然后自己就会进行一个误区,以至于问题无法解决。那么换一个思路则山重水复疑无路,柳暗花明又一村。

思路决定出路…

消息队列的pull与push模式理解相关推荐

  1. RocketMQ消息发送之pull和push

    RocketMQ学习(五)--RocketMQ消息发送之pull和push import org.apache.rocketmq.client.exception.MQClientException; ...

  2. java jms消息队列_JMS消息队列ActiveMQ(发布/订阅模式)

    消费者1(Consumer)--订阅(subcribe)-->主题(Topic)package com.java1234.activemq2; import javax.jms.Connecti ...

  3. 语言叮叮消息接口_五分钟学后端技术:如何学习Java工程师必知必会的消息队列...

    原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者. 什么是消息队列 "RabbitMQ?""Kafka?""RocketMQ?" ...

  4. RabbitMQ总结(一)--消息队列RabbitMQ应答模式(自动、手动)

    原文链接 消息队列RabbitMQ应答模式(自动.手动) 为了确保消息不会丢失,RabbitMQ支持消息应答.消费者发送一个消息应答,告诉RabbitMQ这个消息已经接收并且处理完毕了.RabbitM ...

  5. 消息队列设计的精髓基本都藏在本文里了

    当今市面上有很多主流的消息中间件,如老牌的ActiveMQ.RabbitMQ,炙手可热的Kafka,阿里巴巴自主开发的Notify.MetaQ.RocketMQ等.本文不会一一介绍这些消息队列的所有特 ...

  6. ActiveMQ学习总结(8)——消息队列设计精要

    2019独角兽企业重金招聘Python工程师标准>>> 消息队列已经逐渐成为企业IT系统内部通信的核心手段.它具有低耦合.可靠投递.广播.流量控制.最终一致性等一系列功能,成为异步R ...

  7. rocketmq 重复消费_消息队列 RocketMQ

    引言 本文整理了RocketMQ的相关知识,方便以后查阅. 功能介绍 简单来说,消息队列就是基础数据结构课程里"先进先出"的一种数据结构,但是如果要消除单点故障,保证消息传输的可靠 ...

  8. 【kafka】消息队列设计精要

    1.概述 转载:消息队列设计精要 好文章,建议大家去看原文. 消息队列已经逐渐成为企业IT系统内部通信的核心手段.它具有低耦合.可靠投递.广播.流量控制.最终一致性等一系列功能,成为异步RPC的主要手 ...

  9. 架构师图谱·微服务消息队列篇

    1. 概述 "架构师图谱"是一个很宏大的命题,特别是优秀的架构师自身也是"由点到面再到图",一点点成长积累起来,尝试写这系列文章的目的更多的是结合自身的一些经验 ...

最新文章

  1. 【AI】caffe使用步骤(一):将标注数据生成lmdb或leveldb
  2. 项目经理面试中可能遇到的问题
  3. 清华大学计算机毕业论文,清华大学毕业论文撰写要求
  4. [deviceone开发]-数据绑定示例
  5. 12天学好C语言——记录我的C语言学习之路(Day 12)
  6. 虎年云原生落地技术趋势
  7. 合并百度影音的离线数据 with python 第二版 基于yield
  8. 我如何使用Python查找有趣的人来关注Medium
  9. 三大运营商将解决新老用户套餐不同权问题;罗永浩与抖音合作;Git 2.26发布 | 极客头条...
  10. DataSet.Tables[].Rows[][]的用法
  11. android中得到屏幕的高宽(像素)
  12. 看Spring实战有感(一)
  13. 熟练度=正确的知识 X 大量的刻意练习。
  14. Adobe设计师证书
  15. 微信支付 postman_微信刷脸支付补贴政策有哪些?
  16. Windows 10 企业版 LTSC安装 Microsoft Store
  17. 电子商务系统的建设方式及技术选择
  18. 有没有测试女生暗恋的软件,教你一个小技巧就可以测试女生是否喜欢你!
  19. 参考虚幻引擎UObjectBase类源代码定义出 UObject对象成员的偏移量
  20. 万能营销软件8.508版本

热门文章

  1. JVM成神之路-类加载机制-双亲委派,破坏双亲委派
  2. 计算机/软件专业课【考二门】的211学校集合!
  3. dede css文件,dede css教程
  4. js判断是否为移动端
  5. 腊是壹家剧本杀——5人本(后期会更新)
  6. C# Winform 从扫描仪获取图片 并导出为PDF
  7. excel怎么汇总数据
  8. 英语语法----英语句子成分与五大句型
  9. 10进制计数器Verilog编程
  10. 基于飞凌RK3399核心平台的3D打印机解决方案