错误理解

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

消息队列的模式有两种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. android 启动白屏_为什么说Android 架构的未来是 MVVM?
  2. JAVA 对象序列化(二)——Externalizable
  3. 电信运营商物联网实践建议
  4. python3.6使用mysql_Python之——Python3.6连接MySQL
  5. ++[[]][+[]]+[+[]] == 10 //true
  6. 注解 java 原理_Java注解基本原理
  7. 辅助驾驶等级_BBA霸榜、特斯拉折戟 E-NCAP辅助驾驶评测结果公布
  8. tomcat,zookeeper,activeMQ,Kafka设置jvm参数
  9. 写一个函数将传入的字符串转换成驼峰表示法
  10. 图文细谈远程桌面之3389
  11. 【TSP】基于matlab粒子群算法求解旅行商问题【含Matlab源码 445期】
  12. 电脑tf卡检测不到_为什么电脑不识别TF卡?
  13. 详解电磁兼容测试中 EMI 接收机的几种检波器
  14. 读书之《别做正常的傻瓜》
  15. Mybatis——注入执行sql查询、更新、新增以及建表语句
  16. 高性价比降噪耳机推荐,2023年降噪耳机排行榜推荐
  17. 用SurfaceView绘制正弦曲线
  18. 计算机网络教程 第6版
  19. 高通烧录软件QPST的介绍和使用方法
  20. 学习数据分析,数据分析必备的技能有哪些

热门文章

  1. 借助三大举措 IBM GBS启动全新咨询模式
  2. 公司再小,也不能在网上“裸奔”
  3. logback过滤部分日志输出
  4. dede模板标签帮助[DedeCMS教程]
  5. 诺基亚7.2 ROOT 基于Magisk
  6. 马思瑞美式发音课(第一课)
  7. 2022年全国中职组网络安全国赛赛题思路(仅自己一个做题的思路)——网络安全竞赛试题(7)
  8. windows - 摄像头采集
  9. 手撕数据结构与算法——树(三指针描述一棵树)
  10. 聊聊Spring中的数据绑定 --- DataBinder本尊(源码分析)【享学Spring】