MessageQueue一之介绍

什么是消息队列

消息队列是消息在传输过程中保存消息的容器。

为什么使用消息队列

受限于系统性能(吞吐量、并发、响应时间等)以及为了实现应用解耦和通讯模式,消息队列是实现这些目标的重要角色,下面例举使用场景一一说明:

异步处理



注册后,我们需要向用户手机、邮箱发送消息,推荐志同道合的人,再响应用户,这一系列的业务的处理需要用户花费大把时间等待;
这时我们可以引入消息队列,把注册信息写入DB后就响应用户,将那些不是必须的业务放入消息队列中异步执行,如此大大加快了响应时间。

解耦



在生产者与消费者中,传统做法是把生产系统的数据直接交给消费系统处理,这样当消费系统异常故障的时候,生产者的数据无法及时处理,导致生产系统崩溃;
如果把生产系统的数据交给消息队列,消费系统从消息队列中获取数据,如此不管是生产系统还是消费系统异常故障都不会引起对方崩溃,实现了应用解耦。

流量削峰



在秒杀开始时,由于流量突增引起系统宕机。加入消息队列后,当人数超过了消息队列的长度,就不再接收新的秒杀请求,秒杀业务根据消息队列的请求信息再做后续处理,这样就控制了流量,缓解了系统短时间内的压力。

日志处理



大量日志的系统中,我们需要实时分析日志数据。但是在高峰期时日志输出远远大于日志处理的吞吐量,为了解决这一难题,我们可以把日志输出到kafka队列,再由日志处理系统从kafka读取日志。

消息通讯



消息队列的高效通讯机制适用于消息通讯,比如点对点通讯、或者发布订阅模式。

实现方案

在选择那种技术实现的时候,针对于消息队列使用场景的特性,要考虑如速度、安全、复杂度等因素,目前主流的方案有redis、activeMQ、kafka

时间: 2024-10-10 20:29:16

MessageQueue一之介绍的相关文章

聊一聊Android的事件机制

侯 亮 1概述 在Android平台上,主要用到两种通信机制,即Binder机制和事件机制,前者用于跨进程通信,后者用于进程内部通信. 从技术实现上来说,事件机制还是比较简单的.从大的方面讲,不光是Android平台,各种平台的消息机制的原理基本上都是相近的,其中用到的主要概念大概有: 1)消息发送者: 2)消息队列: 3)消息处理循环. 示意图如下: 图中表达的基本意思是,消息发送者通过某种方式,将消息发送到某个消息队列里,同时还有一个消息处理循环,不断从消息队列里摘取消息,并进一步解析处理.

聊一聊Android的消息机制

侯 亮 1概述 在Android平台上,主要用到两种通信机制,即Binder机制和消息机制,前者用于跨进程通信,后者用于进程内部通信. 从技术实现上来说,消息机制还是比较简单的.从大的方面讲,不光是Android平台,各种平台的消息机制的原理基本上都是相近的,其中用到的主要概念大概有:1)消息发送者:2)消息队列:3)消息处理循环.示意图如下: 图中表达的基本意思是,消息发送者通过某种方式,将消息发送到某个消息队列里,同时还有一个消息处理循环,不断从消息队列里摘取消息,并进一步解析处理. 在An

与多线程结合使用的消息处理类Handler、Message

1. 消息处理类——Handler 消息处理类(Handler)允许发送和处理Message或Runnable对象到其所在线程的MessageQueue中.Handerl有以下两个主要作用: 将Message或Runnable应用post()方法或sendMessage()方法发送到MessageQueue中,在发送时可以指定延迟时间.发送时间或者要携带的Bundle数据.当MessageQueue循环到该Message时,调用相应的Handler对象的handlerMessage()方法对其进

Android消息机制(Handler、MessageQueue、Looper)详细介绍

Android的消息机制其实在android的开发过程中指的也就是Handler的运行机制,这也就引出了android中常见的面试问题: 简述Handler.Looper.MessageQueue的含义,以及它们之间的关系 简述Handler的运行机制 说明Handler.Looper以及Message之间的关系 Handler机制为什么这么重要呢? 我们知道android设备作为一台移动设备,不管是内存或者还是它的性能都会受到一定的限制:过多的使用内存会使内存溢出(OOM):另外一方面,大量的

深入浅出JMS(二)--ActiveMQ简单介绍以及安装

现实的企业中,对于消息通信的应用一直都非常的火热,而且在J2EE的企业应用中扮演着特殊的角色,所以对于它研究是非常有必要的. 上篇博文深入浅出JMS(一)–JMS基本概念,我们介绍了消息通信的规范JMS,我们这篇博文介绍一款开源的JMS具体实现--ActiveMQ.ActiveMQ是一个易于使用的消息中间件. 消息中间件 我们简单的介绍一下消息中间件,对它有一个基本认识就好,消息中间件(MOM:Message Orient middleware). 消息中间件有很多的用途和优点: 1. 将数据从

Handler, MessageQueue, Runnable与Looper

相信不少人对这几个概念深恶痛绝,因为它们"像雾像雨又像风"--自我感觉都很熟识,如果下一次再相遇,却又陌生得很.这种"隔靴搔痒"的感觉促使我们必须与这些"顽固分子"来个彻底的决断. 先不要想太多,任头脑中随意画下对这些概念的第一印象,如图5-5所示. ▲图5 5 概念初探 图5-5是我们对这几个概念的"感官"释义,读者可以尝试着思考下是否和自己所想的基本一致. 那么,如果把这些概念糅合在一起,又会是怎样的呢?如图5-6所示.

Android多线程分析之四:MessageQueue的实现

罗朝辉 (http://blog.csdn.net/kesalin) CC 许可,转载请注明出处 在前面两篇文章<Android多线程分析之二:Thread的实现>,<Android多线程分析之三:Handler,Looper的实现>中分别介绍了 Thread 的创建,运行,销毁的过程以及 Thread与 Handler,Looper 之间的关联:Thread 在其 run() 方法中创建和运行消息处理循环 Looper,而 Looper::loop() 方法不断地从 Messag

Android 中Message,MessageQueue,Looper,Handler详解+实例

一.几个关键概念 1.MessageQueue:是一种数据结构,见名知义,就是一个消息队列,存放消息的地方.每一个线程最多只可以拥有一个MessageQueue数据结构. 创建一个线程的时候,并不会自动创建其MessageQueue.通常使用一个Looper对象对该线程的MessageQueue进行管理.主线程创建时,会创建一 个默认的Looper对象,而Looper对象的创建,将自动创建一个Message Queue.其他非主线程,不会自动创建Looper,要需要的时候,通过调 用prepar

ActiveMQ简单介绍以及安装

概述 首先简单的介绍一下MQ,MQ英文名MessageQueue,中文名也就是大家用的消息队列,干嘛用的呢,说白了就是一个消息的接受和转发的容器,可用于消息推送. ActiveMQ是Apache所提供的一个开源的消息系统,完全采用Java来实现,因此,它能很好地支持J2EE提出的JMS(Java Message Service,即Java消息服务)规范.JMS是一组Java应用程序接口,它提供消息的创建.发送.读取等一系列服务.JMS提供了一组公共应用程 序接口和响应的语法,类似于Java数据库