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