在最近的工作的里面有同事问到我说,为什么我们需要一个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. oracle 归档日志满 报错ORA-00257: archiver error. Connect internal only, until freed

    归档日志满导致无法用户无法登陆 具体处理办法 --用户登陆 Microsoft Windows [Version 6.1.7601] Copyright (c) Microsoft Corporati ...

  2. JavaEE开发之SpringBoot工程的创建、运行与配置

    本篇博客我们就来聊一下如何使用Eclipse+STS插件来创建Spring Boot的工程.Spring Boot可以使我们更容易的使用Spring框架,在Spring Boot中自动配置了好多东西, ...

  3. highlight.js 代码高亮插件的使用

    在网页使用过程中,经常会用到代码的展示.而不同颜色的代码,可以让代码看起来更直观,也更美观. 找了几个不同的插件,觉得highlight的插件比较实用,而且用起来炒鸡简单. 比如这样: 首先,我们先下 ...

  4. MySQL对innodb某一个表进行移动

    (步骤:建表, 禁用表空间,复制表空间,重用表空间)   mysql> desc test; +-------+-------------+------+-----+---------+---- ...

  5. __builtin_popcount(n)

    Gcc提供的内建函数__builtin_popcount(n),可以精确计算n表示成二进制时有多少个1.借助这个函数可以快速判断一个数是否是2的幂. bool isPowerOfTwo(int n) ...

  6. WPF 简易手风琴 (ListBox+Expander)

    概述 之前听说很多大神的成长之路,几乎都有个习惯--写博文,可以有效的对项目进行总结.从而提高开发的经验.所以初学WPF的我想试试,顺便提高一下小学作文的能力.O(∩_∩)O哈哈~ 读万卷书不如行万里 ...

  7. 读 Zepto 源码之神奇的 $

    经过前面三章的铺垫,这篇终于写到了戏肉.在用 zepto 时,肯定离不开这个神奇的 $ 符号,这篇文章将会看看 zepto 是如何实现 $ 的. 读Zepto源码系列文章已经放到了github上,欢迎 ...

  8. 深入Java集合学习系列:Hashtable的实现原理

    第1部分 Hashtable介绍 和HashMap一样,Hashtable也是一个散列表,它存储的内容是键值对(key-value)映射.Hashtable继承于Dictionary,实现了Map.C ...

  9. 简单实现服务器/客户端的c代码

    #include<stdio.h> #include<stdlib.h> #include<string.h> #include<sys/types.h> ...

  10. spring---简介

    spring spring是什么? 目的:解决企业应用开发的复杂性 功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能 范围:任何Java应用 简单来说,Spring是一个轻量级的 ...