结论:
1、rabbitMQ更适合push模式,订阅端自己设置一个channel做消息缓存,慢慢消费
2、basic.consume在消费端设置
3、channel.basicGet pul模式会订阅—获取一条消息—取消订阅,所以轮训的channel.basicGet效率很低

参考地址:https://www.cnblogs.com/SupPilot/p/10218377.html

在RabbitMQ中消费者有2种方式获取队列中的消息:

a) 一种是通过basic.consume命令,订阅某一个队列中的消息,channel会自动在处理完上一条消息之后,接收下一条消息。(同一个channel消息处理是串行的)。除非关闭channel或者取消订阅,否则客户端将会一直接收队列的消息。

b) 另外一种方式是通过basic.get命令主动获取队列中的消息,但是绝对不可以通过循环调用basic.get来代替basic.consume,这是因为basic.get RabbitMQ在实际执行的时候,是首先consume某一个队列,然后检索第一条消息,然后再取消订阅。如果是高吞吐率的消费者,最好还是建议使用basic.consume。

简单总结一下就是说:

consume是只要队列里面还有消息就一直取。

get是只取了队列里面的第一条消息。

因为get开销大,如果需要从一个队列取消息的话,首选consume方式,慎用循环get方式。

参考地址:https://www.cnblogs.com/hzcya1995/p/13302427.html
前言
在rabbitmq中有两种消息处理的模式,一种是推模式/订阅模式/投递模式(也叫push模式),消费者调用channel.basicConsume方法订阅队列后,由RabbitMQ主动将消息推送给订阅队列的消费者;另一种是拉模式/检索模式(也叫pull模式),需要消费者调用channel.basicGet方法,主动从指定队列中拉取消息。

推模式:消息中间件主动将消息推送给消费者
拉模式:消费者主动从消息中间件拉取消息
推模式(push)
1:推模式接收消息是最有效的一种消息处理方式。channel.basicConsume(queneName,consumer)方法将信道(channel)设置成投递模式,直到取消队列的订阅为止;在投递模式期间,当消息到达RabbitMQ时,RabbitMQ会自动地、不断地投递消息给匹配的消费者,而不需要消费端手动来拉取,当然投递消息的个数还是会受到channel.basicQos的限制。

2:推模式将消息提前推送给消费者,消费者必须设置一个缓冲区缓存这些消息。优点是消费者总是有一堆在内存中待处理的消息,所以当真正去消费消息时效率很高。缺点就是缓冲区可能会溢出。

3:由于推模式是信息到达RabbitMQ后,就会立即被投递给匹配的消费者,所以实时性非常好,消费者能及时得到最新的消息。

拉模式(pull)
1:如果只想从队列中获取单条消息而不是持续订阅,则可以使用channel.basicGet方法来进行消费消息。

2:拉模式在消费者需要时才去消息中间件拉取消息,这段网络开销会明显增加消息延迟,降低系统吞吐量。

3:由于拉模式需要消费者手动去RabbitMQ中拉取消息,所以实时性较差;消费者难以获取实时消息,具体什么时候能拿到新消息完全取决于消费者什么时候去拉取消息。

结论
1:不能在循环中使用拉模式来模拟推模式,因为拉模式每次都需要去消息中间件中拉取消息来消费,所以会严重影响RabbitMQ性能。

2:要想实现高吞吐量,消费者需要使用推模式。

RabbitMQ pull与push的区别相关推荐

  1. Pull or Push?监控系统如何选型

    简介: 对于建设一套公司内部使用的监控系统平台,相对来说可选的方案还是非常多的,无论是用开源方案自建还是使用商业的SaaS化产品,都有比较多的可选项.但无论是开源方案还是商业的SaaS产品,真正实施起 ...

  2. Git 远程分支的pull与push

    远程分支信息查看 git branch -r #查看远程分支git branch -a #查看所有分支,本地和远程git remote show [remote-name] #查看远程仓库信息 其中g ...

  3. RocketMQ消息发送之pull和push

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

  4. git pull和push整理和归纳

    目录 各个模块概念 工作区 版本库 暂存区 远程仓库 pull和push流程相关的命令 暂存区相关 版本库相关 远程仓库相关 利用远程仓库协作开发 各个模块概念 我的理解: Git是版本管理工具,它主 ...

  5. 解决:Gitlab上出现“You won‘t be able to pull or push project code via SSH until you add an SSH key to you

    第一次使用Gitlab时,在使用时出现You won't be able to pull or push project code via SSH until you add  an SSH key ...

  6. 解决TortoiseGit每次Pull或者Push都需要输用户名密码的问题

    解决TortoiseGit每次Pull或者Push都需要输用户名密码的问题 每次提交代码到仓库都要输入用户名和密码,王同学差点哭了 忍住 忍住 不能哭 不能哭 解决方法如下: Right click ...

  7. 怎么解决TortoiseGit每次Pull或者Push都需要输用户名密码的问题

    每次用TortoiseGit Pull或者Push的时候都会弹出让输入用户名.密码的框, 很麻烦 解决方法如下: Right click → TortoiseGit → Settings → git→ ...

  8. 关于 git pull 和 git pull origin develop 的区别

    日期:2019 年 9 月 29 日 关于 git pull 和 git pull origin develop 的区别 闲来无事,正于网上冲浪之际,一位漂亮小姐姐抛来一个问题:git pull 和 ...

  9. 解决:Gitlab上出现“You won't be able to pull or push project code via SSH until you add an SSH key to you”

    第一次使用Gitlab上的issues进行缺陷管理,在使用是出现You won't be able to pull or push project code via SSH until you add ...

最新文章

  1. LeetCode简单题之判断句子是否为全字母句
  2. p,v原语解决和尚挑水问题
  3. android json mysql_Android通过json向MySQL中读写数据的方法详解【读取篇】
  4. Vue过滤器的简单使用--实时显示格式化的时间
  5. Java实现单链表的合并(保证数据的有序性)
  6. magento 添加退出链接 Adding a Logout Link to Magento
  7. wordpress安装jquery插件失败_Contact Form 7插件_WordPress表单插件安装使用教程
  8. mysql 0填充,mysql显示宽度与零(0)填充、列属性
  9. POJ 2635 The Embarrassed Cryptographer(JAVA)
  10. Hyperledger fabric通道(Channel)的新建、管理、节点如何加入channel
  11. 9行python代码批量修改window屏保图文件
  12. wordpress建立php站点地图,WordPress站点地图(sitemap)制作方法(免插件)
  13. 计算机毕设人寿保险项目,2017年中国人寿集团在京各直属单位接收毕业生情况公示...
  14. VSS无法访问 (0x80072EFD) 转载
  15. 国内优秀的PHP商城系统整理
  16. 源码包安装Nginx(1.19.1),并配置Nginx,比如:用户认证,防盗链,虚拟主机,SSL等功能
  17. 一加7T手机如何开启NFC、复制门禁卡等功能
  18. 2021年中国乳胶床垫市场趋势报告、技术动态创新及2027年市场预测
  19. 范德堡计算机科学硕士,范德堡大学计算机科学理学硕士研究生申请要求及申请材料要求清单...
  20. 计算机组成与设计:指令-计算机的语言

热门文章

  1. 松原哪家计算机学校好,松原高中学校排名2021最新排名,松原高中排名前十
  2. python selenium 点击开始按钮,python selenium-点击页面而不使用next按钮
  3. mybatis-plus对datetime返回去掉.0_0欧姆电阻只能当导线用?12种用法来学习下
  4. windows下ping命令的结果前加上系统的当前时间
  5. 绕过AppLocker系列之MSBuild的利用
  6. 苹果正研发类似亚马逊Echo设备 Sir更加智能化
  7. 车道线识别/Opencv/传统方法
  8. wireshark 抓 grpc 包
  9. Java基础-this关键字和构造方法(10)
  10. ESLint使用文档