消息队列介绍

消息队列(英语:Message queue)是一种进程间通信或同一进程的不同线程间的通信方式,软件的贮列用来处理一系列的输入,通常是来自用户。

消息队列提供了异步的通信协议,每一个贮列中的纪录包含详细说明的数据,包含发生的时间,输入设备的种类,以及特定的输入参数,也就是说:消息的发送者和接收者不需要同时与消息队列交互。消息会保存在队列中,直到接收者取回它。

消息队列应用场景:

  1. 异步处理:
    异步处理是将很多串行进行的步骤转成异步处理,还是已订单系统为例,下单订单需要创建订单和锁定库存,确定本次请求后马上给用户返回响应,然后把后续请求的数据的都在消息队列,由消息队列异步处理。
  2. 应用解耦:
    举例一下电商系统的中的订单系统。当创建一个订单时:发起支付、扣减库存、发消息告知用户、更新统计数据,这些订单下游的系统都需要实时获得订单数据,随着业务量的增大和业务的变更,有一段时间不需要发消息给客户,或者需要添加功能,每次都需要不断的调式订单系统和下游系统。
    引入消息队列后,订单服务在创建订单时发送一条信息到消息队列主题 Order 中,所有的下游都订阅主题Order,这样无论增加、减少下游系统还是下游系统的功能如何变化,订单服务都不需要做更改了,实现了订单服务和下游服务的解耦。
  3. 流量控制
    在购物网站的做一个秒杀活动,平时网站能支撑每秒1000次并发请求,但是电商秒杀一下请求猛增到每秒3000次请求,多出来的请求,可能直接让系统宕机。

所以我们就需要使用消息队列来控制流量,当系统短时间接收到大量请求时,会先将请求堆积到消息队列上,后端服务从消息队列上消费数据,消息队列相对于给后端服务做了一次缓冲。

常见消息队列

MQ相关的产品有:ActiveMQ,RabbitMQ,RocketMQ,Kafka,Zeromq。目前市面上常用的消息队列产品:RabbitMQ,
Kafka,RocketMQ。因此我们首先来比对一下这几个MQ之前的差别:

总结:
1、一般的业务系统要引入MQ,最早大家都用ActiveMQ,但是现在确实大家用的不多了,没经过大规模吞吐量场景的验证,社区也不是很活跃。
2、后来大家开始用RabbitMQ,但是erlang语言阻止了大量的java工程师去深入研究和掌控他,对公司而言,几乎处于不可控的状态。但由于是开源的,并且也比较稳定,活跃度也高,所以使用很广泛。
3、现在很多的公司也开始使用RocketMQ,由于社区活跃度不高,资料比较少。所以学习成本比较大,因此要使用RocketMQ要考虑社区万一突然黄掉的风险。所以中小型公司,技术实力较为一般,技术挑战不是特别高,用RabbitMQ是不错的选择;大型公司,基础架构研发实力较强,用RocketMQ是很好的选择。
4、如果是大数据领域的实时计算、日志采集等场景,用Kafka是业内标准的,绝对没问题,社区活跃度很高,绝对不会黄,何况几乎是全世界这个领域的事实性规范。
下面章节,我们会主要来说下RabbitMQ和Kafka。

深入浅出消息队列---1、消息队列概述相关推荐

  1. 队列和消息队列_消息队列概述[幻灯片]

    队列和消息队列 昨天,我进行了一次演讲,探讨了使用消息队列的所有方面. 我以前曾写过"您可能不需要消息队列" –现在的结论有些细微差别,但我仍然坚持简单性的观点. 演讲探讨了使用消 ...

  2. weblogic jms消息 删除_消息队列与消息中间件概述:消息中间件核心概念与技术选型...

    什么是消息? "消息"是在两台计算机间传送的数据单位. 消息可以非常简单,例如只包含文本字符串:也可以更复杂,可能包含嵌入对象. 什么是队列? 队列(Queue)队列是一种先进先出 ...

  3. 消息队列面试连环问:如何保证消息不丢失?处理重复消息?消息有序性?消息堆积处理?...

    大家好,我是 yes. 最近我一直扎在消息队列实现细节之中无法自拔,已经写了 3 篇Kafka源码分析,还剩很多没肝完.之前还存着RocketMQ源码分析还没整理.今儿暂时先跳出来盘一盘大方向上的消息 ...

  4. ucosii事件控制块------消息邮箱与消息队列

    UCOSII 使用叫做事件控制块(ECB)的数据结构来描述诸如信号量.邮箱(消息邮箱)和消息队列这些事件 #define OS_EVENT_EN (((OS_Q_EN > 0u) &&a ...

  5. RabbitMQ消息超时时间、队列消息超时时间、队列超时时间

    欢迎来到梁钟霖个人博客网站.本个人博客网站提供最新的站长新闻,各种互联网资讯. 还提供个人博客模板,最新最全的java教程,java面试题.在此我将尽我最大所能将此个人博客网站做的最好! 谢谢大家,愿 ...

  6. redis stream java消息队列_Redis-消息队列的两种实现方式

    索引: 基于list的实现方式 基于publish/subscribe 实战 消息队列简介 消息队列:是消息的顺序集合. 比如网站的PV统计和查看,传统方式就是每个页面发一个AJAX然后mysql给P ...

  7. 【Android 异步操作】HandlerThread 示例 ( 初始化并执行 | 获取Looper | 获取 Handler | 获取消息队列 | 设置空闲队列 | 代码示例 )

    文章目录 一.HandlerThread 初始化 二.HandlerThread 获取Looper 三.HandlerThread 获取消息队列 MessageQueue 四.HandlerThrea ...

  8. 【Android 异步操作】Handler 机制 ( Android 提供的 Handler 源码解析 | Handler 构造与消息分发 | MessageQueue 消息队列相关方法 )

    文章目录 一.Handler 构造函数 二.Handler 消息分发 三.MessageQueue 消息队列相关函数 一.Handler 构造函数 一般使用 Handler 时 , 调用 Handle ...

  9. 【Android 异步操作】手写 Handler ( 消息队列 MessageQueue | 消息保存到链表 | 从链表中获取消息 )

    文章目录 一.MessageQueue 消息队列存储消息 二.MessageQueue 消息队列取出消息 三.消息队列完整代码 一.MessageQueue 消息队列存储消息 Message 链表 : ...

  10. Linux c 基于内存的进程通信—共享内存、共享队列(消息队列)

    基于内存的进程通信: 1.      内核共享内存 编程模型:     1.1.创建共享内存,得到一个ID  shmget 1.2.把ID影射成虚拟地址(挂载)  shmat 1.3.使用虚拟地址访问 ...

最新文章

  1. 送你8个Python高效数据分析的技巧(附代码)
  2. javamail程序源码_JavaMail可能是邪恶的(并迫使您重新启动应用程序服务器)
  3. leetcode 992. K 个不同整数的子数组(滑动窗口)
  4. ajax ssm 页面跳转_Shiro 教程,Ajax请求拦截跳转页面方案
  5. 10.2.5 监视文件.
  6. Oracle 和Mysql Group by的细节与坑
  7. Java面向对象和类
  8. Security+ 学习笔记10 软件质量保证
  9. 除了待办清单,用 Things 还能做什么?
  10. CridView创建 实现选中,编辑,取消,删除
  11. java zipentry 压缩率_java – ZipEntry.STORED用于已经压缩的文件?
  12. Swift桥接OC,手动创建Objective-OC Bridging Header
  13. python 高德地图
  14. Status Register ST1 状态寄存器 (28335)
  15. Pyrhon pyqt5 视频转字符画
  16. 数据库设计之概念结构设计
  17. Java Web学习日记(一)
  18. html svg波浪,CSS实现svg图片水纹波浪流动效果
  19. 计算:光速运行一年的长度是多少米?(测试整数运算溢出)
  20. matlab清除所有变量,但是除了某些变量

热门文章

  1. 数据仓库(11)什么是大数据治理,数据治理的范围是哪些
  2. 【Android学习】Android常用框架
  3. linux怎样安装xz工具,如何安装XZ Utils 解压缩工具以及利用 xz工具来解压缩.xz文件...
  4. 震撼,愿所有中国人,都能听到这篇演讲!
  5. www.a-d-w-a-r-e.com病毒清除方法
  6. 中小学数学卷子自动生成程序分析
  7. Oracle undo 介绍
  8. 《head first sql》读书笔记1
  9. 车辆动力学模型推导注意细节(eg:科氏力的判断)
  10. WIN7下搭建CORDOVA环境