消息队列的pull与push模式理解
错误理解
之所以将这个标题,定义为错误理解,原因就是无法真正的说服自己;
消息队列的模式有两种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模式理解相关推荐
- RocketMQ消息发送之pull和push
RocketMQ学习(五)--RocketMQ消息发送之pull和push import org.apache.rocketmq.client.exception.MQClientException; ...
- java jms消息队列_JMS消息队列ActiveMQ(发布/订阅模式)
消费者1(Consumer)--订阅(subcribe)-->主题(Topic)package com.java1234.activemq2; import javax.jms.Connecti ...
- 语言叮叮消息接口_五分钟学后端技术:如何学习Java工程师必知必会的消息队列...
原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者. 什么是消息队列 "RabbitMQ?""Kafka?""RocketMQ?" ...
- RabbitMQ总结(一)--消息队列RabbitMQ应答模式(自动、手动)
原文链接 消息队列RabbitMQ应答模式(自动.手动) 为了确保消息不会丢失,RabbitMQ支持消息应答.消费者发送一个消息应答,告诉RabbitMQ这个消息已经接收并且处理完毕了.RabbitM ...
- 消息队列设计的精髓基本都藏在本文里了
当今市面上有很多主流的消息中间件,如老牌的ActiveMQ.RabbitMQ,炙手可热的Kafka,阿里巴巴自主开发的Notify.MetaQ.RocketMQ等.本文不会一一介绍这些消息队列的所有特 ...
- ActiveMQ学习总结(8)——消息队列设计精要
2019独角兽企业重金招聘Python工程师标准>>> 消息队列已经逐渐成为企业IT系统内部通信的核心手段.它具有低耦合.可靠投递.广播.流量控制.最终一致性等一系列功能,成为异步R ...
- rocketmq 重复消费_消息队列 RocketMQ
引言 本文整理了RocketMQ的相关知识,方便以后查阅. 功能介绍 简单来说,消息队列就是基础数据结构课程里"先进先出"的一种数据结构,但是如果要消除单点故障,保证消息传输的可靠 ...
- 【kafka】消息队列设计精要
1.概述 转载:消息队列设计精要 好文章,建议大家去看原文. 消息队列已经逐渐成为企业IT系统内部通信的核心手段.它具有低耦合.可靠投递.广播.流量控制.最终一致性等一系列功能,成为异步RPC的主要手 ...
- 架构师图谱·微服务消息队列篇
1. 概述 "架构师图谱"是一个很宏大的命题,特别是优秀的架构师自身也是"由点到面再到图",一点点成长积累起来,尝试写这系列文章的目的更多的是结合自身的一些经验 ...
最新文章
- 【AI】caffe使用步骤(一):将标注数据生成lmdb或leveldb
- 项目经理面试中可能遇到的问题
- 清华大学计算机毕业论文,清华大学毕业论文撰写要求
- [deviceone开发]-数据绑定示例
- 12天学好C语言——记录我的C语言学习之路(Day 12)
- 虎年云原生落地技术趋势
- 合并百度影音的离线数据 with python 第二版 基于yield
- 我如何使用Python查找有趣的人来关注Medium
- 三大运营商将解决新老用户套餐不同权问题;罗永浩与抖音合作;Git 2.26发布 | 极客头条...
- DataSet.Tables[].Rows[][]的用法
- android中得到屏幕的高宽(像素)
- 看Spring实战有感(一)
- 熟练度=正确的知识 X 大量的刻意练习。
- Adobe设计师证书
- 微信支付 postman_微信刷脸支付补贴政策有哪些?
- Windows 10 企业版 LTSC安装 Microsoft Store
- 电子商务系统的建设方式及技术选择
- 有没有测试女生暗恋的软件,教你一个小技巧就可以测试女生是否喜欢你!
- 参考虚幻引擎UObjectBase类源代码定义出 UObject对象成员的偏移量
- 万能营销软件8.508版本