Message Queue的设计和实现(7)
http://mp.weixin.qq.com/s/zQdDBAHu1UgJJzxH2eCHgQ

数据发送中的推与拉。

当MQ要把数据给消费者的时候,就涉及到数据的传递方式。一种是MQ主动的将数据推给消费者;而另一种,则是消费者主动去拉取。两种方式各有优缺,我们就一个个的来讲。(无非就是在爱情中谁主动的问题^_^)

推模式

推模式很明显,主动方应该是MQ。在实现的时候却有两种方式。

1、MQ知道消费者的IP和端口,主动发起连接,推送数据。

这种方式是最容易想到和实现的。socket在connect的时候,需要IP:Port。只要这两个数据存在了,MQ就很轻松的将数据推送出去。但是,问题来了,怎么知道IP和Port。

这里有两种方式:

A、MQ存储有所有消费者的列表。就是手动或者半自动的将所有消费者的列表配置到MQ中。这种方式实现简单,但是灵活性太差,扩展性不好;

B、消费者自动注册到MQ。当消费者启动以后,调用MQ提供的regist方法,自动将自己的IP和Port提交到MQ。注册成功后,MQ将信息放入发送meta数据中,进行推送。

第二种方式扩展性比第一种好很多,但是复杂性也相对比第一种要大一些。

2、消费者主动连接到MQ,再由MQ进行信息推送。

这种方式的实现必须采用长连接的方式。即:消费者主动connect到MQ,然后两者维持连接不断开。当有数据到来时,MQ利用这个已有的长连接,将对应的数据推送到消费者。

这种方式实现的难度比较高,涉及到长连接维持,以及连接的存活管理。而且如果后端有大量的消费者的话,MQ会消耗比较多的连接资源。

以上聊的是推的模式。这种模式及时性非常好,数据一到达,立马可以push到消费者,基本没有延迟。但是实现复杂度和灵活性会稍微麻烦一些。

拉模式

这种模式就比较简单,就是消费者主动。每次由消费者主动去获取信息。不论长短连接都可以。MQ也不用维持连接状态和消费者信息,只要你来获取,我就把数据给你。

这种方式的好处在于实现非常简单,MQ无负担,不用记录消费者的信息。如果服务挂掉或者重启,也不用担心消费者信息状态丢失。因为他自己会来主动获取。

不足之处在于有可能存在短暂延迟。

在实现的时候,也可以有改进。比如,消费者去MQ拉取数据,如果拉取后没有数据,可以停留一定时间(比如:100毫秒)再去拉取。如果拉取有数据,则不用停留,直接拉取。拉的时候也可以走批量拉取,避免数据堆积。

总的来讲,推拉模式都是可行的,实现复杂度其实也都还好,大家可以根据自身业务的特点来定制这两种模式。

转载于:https://www.cnblogs.com/bluestorm/p/6675447.html

Message Queue中的推与拉(转)相关推荐

  1. MSMQ(MicroSoft Message Queue,微软消息队列)

    MSMQ(MicroSoft Message Queue,微软消息队列)是在多个不同的应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一台机器上,也可以分布于相连的网络空间中的任一位 ...

  2. MQTT 5.0 特性 Inflight Window Message Queue

    Inflight Window 与 Message Queue 说明 为了提高消息吞吐效率和减少网络波动带来的影响,EMQ X 消息服务器允许多个未确认的 QoS 1 和 QoS 2 报文同时存在于网 ...

  3. 直播平台源码中的推拉流是什么

    关于直播平台源码中的推流和拉流,最常用的就是RTMP和RTSP协议了 推流,指的是把采集阶段封包好的内容传输到服务器的过程,推流是直播端需要完成的步骤.拉流是指服务器已有直播内容,用指定地址进行拉取的 ...

  4. MQ(Message Queue)简介

    一.何为MQ? MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们.消息传 ...

  5. MQ(Message Queue)介绍

    MQ(Message Queue)介绍 文章目录 MQ(Message Queue)介绍 MQ优缺点 RocketMQ常规协议 RocketMq快速入门 基本概念 系统架构 Producer Cons ...

  6. 现代IM系统中消息推送和存储架构的实现

    摘要: 前言 IM全称是『Instant Messaging』,中文名是即时通讯.在这个高度信息化的移动互联网时代,生活中IM类产品已经成为必备品,比较有名的如钉钉.微信.QQ等以IM为核心功能的产品 ...

  7. 消息队列-Message Queue

    消息队列-Message Queue 目前随着互联网的普及以及上网用户的增多,拥有一套 安全.稳定.低耦合.高性能的内部通信工具尤为重要. 什么是消息队列? 消息队列(英语:Message queue ...

  8. windows下ffmpeg结合Nginx搭建RTMP,直播中的推流和拉流

    windows下ffmpeg结合Nginx搭建RTMP,直播中的推流和拉流 推流和拉流的概念 以及RTMP协议 在直播中,一般需要三个角色:主播,服务器,用户.主播通过推流将数据推到服务器上,而用户可 ...

  9. MSMQ(Microsoft Message Queue)介绍

    利用 MSMQ(Microsoft Message Queue),应用程序开发人员可以通过发送和接收消息方便地与应用程序进行快速可靠的通信.消息处理为您提供了有保障的消息传递和执行许多业务处理的可靠的 ...

最新文章

  1. 【文文殿下】数论一些经典结论
  2. iOS地图定位(Map)
  3. java面向对象的特征 —(13)
  4. 谷歌:不守规矩的“顽童”
  5. C++ string s[10] 和 string s(10,‘ ‘)
  6. 利用已有的大数据技术,如何构建机器学习平台
  7. OPencv_边缘检测算法
  8. js常用内建对象之:Array
  9. 阿里云Kubernetes SpringCloud 实践进行时(5): 弹性服务与容错处理
  10. Ubuntu18.04下NVIDIA CUDA安装指南和DeepLearning4J GPU配置
  11. 类别不平衡学习的常用策略
  12. DSP28335定时器
  13. Mini CFA 考试练习题 Ethics and Investment Professionalism
  14. 黑客教父龚蔚:扫码应用要警惕 公共WiFi攻不破支付软件
  15. 飞机黑匣子结构:拆解神秘的飞机黑匣子,看看里面的PCB和元器件都长什么样?...
  16. 数据结构实验——实验二链表实验
  17. 与通用计算机相比较 单片机优势在哪,单片机原理与嵌入式系统-中国大学mooc-题库零氪...
  18. 某传奇手游封包和数据分析
  19. 微软不能关闭服务器,微软(Microsoft )账号怎么彻底关闭(Win10 Microsoft帐户无法登录怎么办?)...
  20. 曾经被你亲手敲烂过的机械键盘

热门文章

  1. 视窗宽高offset、client、scroll
  2. 存储知识课堂(二):磁盘读写磁头揭秘
  3. [转载]从零开始学习jQuery (一) 开天辟地入门篇
  4. 查看MS-SQL的安装版本及补丁
  5. RTL8111H-CG规格书 DATASHEET
  6. 【拔刀吧少年】之sort uniq tr cut eval常用命令
  7. html中单选多选怎么写,HTML中select标签单选多选用法详解
  8. pipreqs生成python项目依赖清单
  9. 利用向量叉积求三角形的面积(+STL:nth_element求第K大的数)
  10. 计算机漫游用户的工作原理,深入理解计算机系统——计算机系统漫游