很多没有实际项目经验的小伙伴,对消息队列系统非常陌生,看着很多架构的介绍中,都提到消息队列。但是,不知道为什么要用消息队列?什么是消息队列?常见的消息队列产品有哪些?





  通过阅读本文,帮你解开以上的疑惑。

1. 为什么要用消息队列?

  假设一个老大,接到一个任务要处理完。在处理这个任务时,把这个任务分解为几个小任务,只要分别完成了这几个小任务,整个任务也就完成了。





  做到某个小任务时,发现这个小任务需要花很多时间完成,而且这个小任务迟点完成也不影响整个任务的完成进度。于是,老大把这个小任务交个一个小弟去做,自己去接着完成其他的任务。





  在上面的例子中,老大就是后台系统,小弟就是消息队列系统,当后台系统发现完成某些小任务需要花很多时间,而且迟点完成也不影响整个任务的,就会把这些小任务交给消息队列系统。





  在实际的app后端中,发送邮件,发送短信,推送等这些任务,都非常适合在消息队列系统中做的。大家想想,这些任务是不是都需要花比较多的时间,而且迟点完成也不影响的。把这些任务放在队列中,可加快请求的响应时间。

2. 消息队列是怎么工作?

  消息队列系统,一般都包含3个角色:队列服务端,队列的生产者,队列的消费者。





  消息队列系统类似于这个场景:有一条信息传送带不停地运转。在传送带的起点,工人a不断地把信息放在一个盒子,把盒子放到传送带上,盒子被传送带传送到终点。在终点上,工人b把盒子上的信息取出来,进行处理。





  在上面的场景中,不停运转的传送带就是队列服务端,在传送带起点不断放盒子的工人a就是队列的生产者,在传送带终点不断取盒子的工人b就是队列的消费者。





  消息队列的服务端,现在有大量的开源的应用,例如RabbitMQ ,ZeroMQ ,redis等。





  队列的生产者和服务者,是针对消息队列服务端开发的客户端,例如,RabbitMQ就有针对java,php等语言开发的客户端。





  例如,在app后端中,用代码调用 java客户端,把要发送的短信信息放在ZeroMQ中,这里java客户端是充当队列的生产者。





  写一个守护进程,在守护进程中,通过代码调用 java客户端把要发送的短信信息不断地从ZeroMQ取出来,然后发送出去。

3. 常见的一些消息队列产品

  RabbitMQ:





  是使用Erlang编写的一个开源的消息队列,本身支持很多的协议:AMQP,XMPP, SMTP, STOMP,也正是如此,使的它变的非常重量级,更适合于企业级的开发。同时实现了一个经纪人(Broker)构架,这意味着消息在发送给客户端时先在中心队列排队。对路由(Routing),负载均衡(Load balance)或者数据持久化都有很好的支持。





  同时,RabbitMQ自带了一个web监控界面,可方便监控队列的情况。





  Redis:





  虽然是一个key-value系统,但自身也支持队列这种数据结构,可看做是一个轻量级的消息队列系统。





  在app后端架构中,redis是被广泛使用,如果同时把它作为消息队列使用,就减少了运维上的成本。





  ZeroMq:





  号称最快的消息队列系统,尤其针对大吞吐量的需求场景。





  ActiveMQ:

  是Apache下的一个子项目。 类似于ZeroMQ,它能够以代理人和点对点的技术实现队列。

---------------------------------------------------------------------------------------------------------------------------

打开链接  app后端系列文章总目录 总目录 ,能查看本人发表过的所有原创“app后端”文章。

【作者】曾健生

【QQ】190678908

【qq群】254659220 

【微信公众号】 appbackend

【新浪微博】 @newjueqi

【博客】http://blog.csdn.net/newjueqi

版权声明:本文为博主原创文章,未经博主允许不得转载。

13.app后端为什么要用到消息队列的更多相关文章

  1. 13张PPT带你了解主动式消息队列处理集群

    前言 偷偷和你们说,我搞了一份内部资料,该内部资料共有13张PPT,据作者透露,该PPT至少花了整整1周时间才编写完成,其内容简洁明了,内容深度足够,易于初学者理解,也给深度开发人员分享了不一样的消息 ...

  2. app后端设计--总目录 (转)

    特此说明,我转载的!!! app后端设计(1)--api app后端设计(2)--xmpp的使用 app后端设计(3)--短信,邮件,推送服务 app后端设计(4)-- 通讯的安全性 app后端设计( ...

  3. app后端设计--总目录

    做了3年app相关的系统架构,api设计,先后在3个创业公司中工作,经历过手机网页端,android客户端,iphone客户端,现就职于app云后端平台bmob(想了解bmob点击这里).其中的乐与苦 ...

  4. [置顶] app后端设计--总目录

    版权声明:本文为博主原创文章,未经博主允许不得转载. 做了3年app相关的系统架构,api设计,先后在3个创业公司中工作,经历过手机网页端,Android客户端,iphone客户端,现就职于app云后 ...

  5. system的消息队列实例

    1\创建或打开消息队列函数原型:int msgget(key_t key, int msgflg)参数第一个参数为ftok方法创建的一个kety_t或者为一个整数值第二个参数为逻辑控制,IPC_CRE ...

  6. app后端设计(13)--IM4JAVA+GraphicsMagick实现中文水印

    在app的后台中,有时候为了标示版权,需要给图片加上水印. 在liunx中,IM4JAVA+GraphicsMagick是个高效处理图片的方案,图片的裁剪是使用了这个技术方案,为了减少不必要的开发成本 ...

  7. app后端设计(2)--xmpp的使用(2014.01.14更新)

    在app中有时候是需要添加聊天服务,在这里谈谈曾经开发聊天服务的经验: (1)聊天服务端选的openfire,这是一个基于xmpp协议的聊天服务器(XMPP是一种基于XML的协议,它继承了在XML环境 ...

  8. app 后端技术

    app 后端技术 一直以来工作的方向是web server,对app server没有什么了解.虽然没有接触过移动app开发,但对app后端技术还是挺有探索欲望的,app应用和web应用在前端的用户习 ...

  9. 模仿J2EE的session机制的App后端会话信息管理

    此文章只将思想,不提供具体完整实现(博主太懒,懒得整理),有疑问或想了解的可以私信或评论 背景 在传统的java web 中小型项目中,一般使用session暂存会话信息,比如登录者的身份信息等.此机 ...

随机推荐

  1. 最大的k个数问题

    代码来源: http://blog.csdn.net/v_JULY_v 调整堆为小顶堆的代码片:基本思想就是把孩子节点中大的一个跟父节点交换 void HeapAdjust(int array[], ...

  2. Digogo ugdx文件的制作

    The openplatform source code is in old IT FTP server at "vte/KCD/20150814/openplatform_wallace. ...

  3. EventBus3.0 study

    概述 eventbus出来很久了,最近想用一下eventbus,自己对着一些博客撸了一个demo,发现竟然crash了,然后去看看源码发现3.0的eventbus有了很多改动.技术变化真快,得保持谦虚 ...

  4. 查询oracle数据库的数据库名、实例名、ORACLE_SID

    数据库名.实例名.数据库域名.全局数据库名.服务名 , 这是几个令很多初学者容易混淆的概念.相信很多初学者都与我一样被标题上这些个概念搞得一头雾水.我们现在就来把它们弄个明白. 一.数据库名 什么是数 ...

  5. Oracle12c(12.1)中性能优化&功能增强之通过参数THREADED_EXECTION使用多线程模型

    1.   后台 UNIX/Linux系统上,oracle用多进程模型.例如:linux上一个常规安装的数据库会有如下进程列: $ ps -ef | grep [o]ra_ oracle  15356  ...

  6. android DialogFragment 实现Dialog展示扫二维码图片展示

    近期开发项目,做个按钮点击弹出展示微信二维码关注微信公众号的展示框,于是想到DialogFragment,期间对Dialog的title的底框字体颜色做出相关设置,记录如下: 下面是 DialogFr ...

  7. ORACLE分页SQL语句(转载)

    1.根据ROWID来分select * from t_xiaoxi where rowid in(select rid from (select rownum rn,rid from(select r ...

  8. SDCC2013大会笔记整理

    2013-8-30 大会首日 百度移动云三大框架:Clouda.SiteApp.Appbuilder MBaaS解决高性能Server很难构建的问题. 百度开放云的区域运营服务于创业者 ------- ...

  9. 五分钟学会centos配置gitlab

    下载gitlab 亲测: centos6.5 安装依赖包: : yum install curl policycoreutils policycoreutils-python openssh-serv ...

  10. python 基础(四) 正则,递归 生成器

    字符串是编程时涉及到的最多的一种数据结构,对字符串进行操作的需求几乎无处不在.比如判断一个字符串是否是合法的Email地址,虽然可以编程提取@前后的子串,再分别判断是否是单词和域名,但这样做不但麻烦, ...