在最近的工作的里面有同事问到我说,为什么我们需要一个Message Queue,Message Queue可以在哪些地方用,经过一些整理,大概能找到这些点,假如你有这方面的要求,也可以考虑使用Message Queue。

异步通信

很多时候,我们都不需要立即处理消息,或处理消息的时间过长,我们不希望用户一直等待。比如京东的优惠券的发放,你领取优惠券后,告诉你5~10分钟到账,就是这个道理。Message Queue就能帮你实现异步通信,你将消息放入队列,不立即处理他们,另外的服务再慢慢的从队列取数据,一个个的处理。

保证顺序

很多场景下,处理消息的顺序是很重要的,消息队列就能帮你做到这点。

缓冲

各种抢票耍猴网站,搞的手机抢购大赛,你可以将这些请求统统放入消息队列,然后再结合自己的耍猴天分,开发各种耍猴的政策,目的就是浪费抢购人的时间。要做这个,消息队列可以帮助你,就算是突然猛增的流量,也只是放入队列,并不立即处理,所以能减轻系统其他部分的压力。

成功保证

你要保证用户的某种操作能够成功。消费消息队列的时候,当成功了,给队列一个返回值,队列帮你把这条消息移出对列。如果没有成功,那你就不告诉队列已经成功,这个任务就一直在队列里面,等待下一次的处理。

同时这也算是一种弹性的设计,假如处理消息队列的服务崩溃了,更多的消息仍然可以进入队列,等处理消息的服务重启后,重新接着上次的任务走。

解耦系统

消息队列也能帮你解耦系统,你只需要发出消息,不用关心消息如何处理。另一方面,如果你是消息的接受方,也不需要知道消息从何而来,干你的事情就得了,于是系统之间相对比较独立。

暂时能想到这么多,目前知道的消息队列不少,像Apache ActiveMQ, MSMQ, RabbitMQ, OpenAMQ, ZeroMQ, DotNetMQ,各有不同,按需选择吧。

常见的Message Queue应用场景的更多相关文章

  1. 为什么要用Message Queue

    摘录自博客:http://dataunion.org/9307.html?utm_source=tuicool&utm_medium=referral 为什么要用Message Queue 解 ...

  2. 消息队列(Message Queue)基本概念(转)

    背景 之前做日志收集模块时,用到flume.另外也有的方案,集成kafaka来提升系统可扩展性,其中涉及到消息队列当时自己并不清楚为什么要使用消息队列.而在我自己提出的原始日志采集方案中不适用消息队列 ...

  3. Java分布式:消息队列(Message Queue)

    Java分布式:消息队列(Message Queue) 引入消息队列 消息,是服务间通信的一种数据单位,消息可以非常简单,例如只包含文本字符串:也可以更复杂,可能包含嵌入对象.队列,是一种常见的数据结 ...

  4. Message Queue的使用目的

    为什么要用Message Queue   摘录自博客:http://dataunion.org/9307.html?utm_source=tuicool&utm_medium=referral ...

  5. Top 10 Uses For A Message Queue

    We’ve been working with, building, and evangelising message queues for the last year, and it’s no se ...

  6. 消息队列(Message Queue)基本概念

    背景 之前做日志收集模块时,用到flume.另外也有的方案,集成kafaka来提升系统可扩展性,其中涉及到消息队列当时自己并不清楚为什么要使用消息队列.而在我自己提出的原始日志采集方案中不适用消息队列 ...

  7. 初识Message Queue之--基础篇

    之前我在项目中要用到消息队列相关的技术时,一直让Redis兼职消息队列功能,一个偶然的机会接触到了MSMQ消息队列.秉着技术还是专业的好为原则,对MSMQ进行了学习,以下是我个人的学习笔记. 一.什么 ...

  8. MSMQ(Microsoft Message Queue)

    http://www.cnblogs.com/sk-net/archive/2011/11/25/2232341.html 利用 MSMQ(Microsoft Message Queue),应用程序开 ...

  9. Message Queue vs. Web Services?

    From stackoverflow.com When you use a web service you have a client and a server: If the server fail ...

随机推荐

  1. Linux IO barrier

    I/O顺序问题是一个比较综合的问题,它涉及的层次比较多,从VFS page cache到I/O调度算法,从IO子系统到存储外设.而Linux I/O barrier就是其中重要的一部分. 可能很多人认 ...

  2. DFB系列 之 SetCooperativeLevel协作级别

    1. 函数原型解析 函数声明 function SetCooperativeLevel(hWnd: HWND; dwFlags: DWORD): HResult; stdcall; 设置指定的IDir ...

  3. hdu4185二分图匹配

    Thanks to a certain "green" resources company, there is a new profitable industry of oil s ...

  4. 关于jstl.jar引用问题及解决方法

    在前文SSM说到因为从MyEclipse换成了Eclipse.有些架包自动缺失. 造成:"org.apache.jasper.JasperException: This absolute u ...

  5. OC点语法介绍和使用以及@property关键字

    使用"点语法" Person *p =[Person new]; //点语法 //对象.属性名 //注意,此时 (p.age)并不是直接方法实例对象 //而是xcode可能到点语法 ...

  6. H5 canvas圆形的时钟

    今天用H5中的canvas标签做一个时钟,H5中有很多好用的新增标签,真的很不错. 1.canvas标签介绍 <canvas> 标签定义图形,比如图表和其他图像,你必须使用脚本来绘制图形. ...

  7. js与juery基础知识对比(一)---2017-05-06

    用表格做的,想要对比的内容一目了然,红色部分为重点   js jquery 取元素 id: document.getElementById("aa"); 取到的是dom对象 cla ...

  8. Unity 消息发送机制 解析

    该博客,只为解析,解析,解析,已经整理好,已经整理好,已经整理好.代码核心原理套用网上最流行的那一套,也是最常用游戏开发适用的消息机制.这里面加上自己的一些优化,极大的修正(哈哈),实测,没问题.万一 ...

  9. hdu4283 You Are the One 区间DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4283 自己想了很久还是不会,参考了别人的思路才写的,区间DP还是很弱,继续努力!! 思路: 转载: 题 ...

  10. [笔记]cin、cout与scanf、printf的效率差异对比分析

    之前上传UVa227 puzzle时,好不容易AC了,但发现自己用时50(ms),而在VJ上看到人家都是40ms.20ms,于是打开一个20ms的代码查看人家强在哪里.但结果研究了半天感觉差不多,于是 ...