何为MQ

MQ,Message Queue,消息队列,队列是一种先进先出的数据结构,而消息队列表示对于消息的发送和接收也具有先进先出的特性。

所谓消息,就是具备一定格式(协议),携带数据的消息载体。

为何要用MQ

MQ是一直存在,不过随着分布式/微服务架构的流行,成了解决微服务之间问题的常用工具。

应用解耦

假设有系统A、B、C。

A系统要与B、C系统交互,调用B、C系统,假设没有使用MQ。使用直连调用的话。

  • A、B、C系统必须同时在线,否则就会调用失败。比如订单系统下单后要调用物流系统发货,但是由于物流系统宕机,导致订单系统也不能用了。

使用MQ之后:

  • 系统A不再是直连系统B和系统C了,而是通过把消息发到MQ的某个topic或者Queue中进行存储,然后系统B、C通过订阅MQ的这个主题或者队列实现消息的接收消费。
  • 消息的发送是消费都是异步的,所以A、B、C系统无需必须同时在线,就算B、C宕机也不影响系统A生产消息发送到MQ,就算A系统宕机,只要他生产了消息到MQ上,也不影响B、C对消息进行消费。比如订单系统下单后,往MQ发一个发货消息,然后物流系统就算当时挂了,只要重新上线之后也能接收消息,完成消息的消费。
流量削峰

当某个系统的请求量在某个时刻大大增加,有可能会把系统压垮。

假设在某个时间段系统的请求大大增加,大量的请求到了后台,可能会把数据库MySql压垮。

使用消息队列的话,可以将用户请求入队在消息队列里面,缓存起来,MQ起一个缓冲池的作用。
然后系统在自身承受范围内对用户请求从MQ中获取进行消费。

比如一个系统的正常时段QPS是1000,流量高峰时期是10000,为了应对流量高峰期采用高性能的服务器,在经济角度上来说不是很划算,此时使用MQ,对请求进行一个削峰的作用,把用户请求缓冲起来,再以一定的峰值让系统进行消费。

消息分发

假设有系统A、B、C。

  • 假设需求改变之后,A系统不再需要调用C系统了,就要修改A系统的代码删除对C系统的调用。
  • 假设需求改变之后,新增了一个D系统,A系统要调用D系统。此时也要修改A系统的代码增加调用D系统的代码。

使用MQ后:

  • 假设需求改变之后,A系统不再需要调用C系统了,也无需修改A系统的代码,只需修改C系统的代码,比如取消订阅这个主题、队列等。
  • 假设需求改变之后,新增了一个D系统,也无需修改A系统的代码,只需修改D系统代码来消费消息,比如使D系统订阅某个主题或者队列。

通过MQ可以使得消息在多个系统之间可以更加流通,数据的产生方无需知道消息由谁消费,只管把消息发送到MQ的某个topic或者queue中,数据的消费方也无需知道消息由谁产生,只管从某个topic或者queue订阅消息进行消费即可。

异步消息

可以把业务系统调用链中的非实时核心业务需求通过MQ进行异步化,提升系统吞吐量。
有A、B、C三个系统,A系统调用B系统,B系统调用C系统。
B系统的处理时间为10ms,C系统的处理时间为3s。并且C系统的业务对于操作来说并不需要实时知道结果。

比如用户注册业务:

消费端发送请求到用户系统,用户系统进行一系列判断后,往数据库的用户表添加一条数据,耗时10ms,然后用户系统调用日志系统进行日志的记录,耗时3s,假设不使用MQ,此时消费端得到响应的时间为3s又10ms。

因为日志记录并不需要实时记录,所以可以使用MQ进行异步调用。

消费端发送请求到用户系统,用户系统进行一系列判断后,往数据库的用户表添加一条数据,耗时10ms,然后用户系统往MQ上发送一条日志记录的消息,耗时1ms后,就返回响应给消费端。然后日志系统异步进行日志记录。此时消费端得到响应的时间是11ms。效率大大增加。

假设一些需求需要得到一个回调函数,使用消息总线,可以很方便解决这个问题,A调用B服务后,只需要监听B处理完成的消息,当B处理完成后,会发送一条消息给MQ,MQ会将此消息转发给A服务。

这样A服务既不用循环调用B的查询api,也不用提供callback api。同样B服务也不用做这些操作。A服务还能及时的得到异步处理成功的消息。

缺点:

  1. 系统稳定性降低:系统引用的外部依赖越多,系统的稳定性就越差,因为此时系统的稳定性不仅要收系统本身影响,还要受外部依赖的稳定性影响,比如如果MQ系统宕机了,就会对系统业务造成影响。 所以MQ的高可用性选型的一个重要指标。
  2. MQ的加入大大得增加了系统的复杂性,以前系统同步远程直连调用,现在是通过MQ进行异步调用,如何保证消息没有被重复消费、怎么处理消息丢失的情况、怎么保证消息处理的顺序正确性等。
  3. 一致性问题:A系统处理完业务后,通过MQ把发送消息给B、C、D三个系统,如果B、C系统处理成功、D系统处理失败,如何保证消息处理的一致性?

何为MQ以及为何要用MQ相关推荐

  1. 兔子mq框架_春天兔子MQ

    兔子mq框架 Spring RabbitMQ is the message broker based on Spring AMQP protocol implementation. Spring Ra ...

  2. 什么是MQ?什么时候使用MQ?为什么要使用MQ?

    只是代码的搬运工~~~~~ 问题1:什么是MQ?什么时候使用MQ?为什么要使用MQ? MQ,是一种跨进程的通信机制,用于上下游传递消息. 在互联网架构中,MQ是一种非常常见的上下游"逻辑解耦 ...

  3. MQ理论介绍与主流MQ对比

    1.什么是MQ? MQ(Message Queue)消息队列,是基础数据结构中"先进先出"的一种数据结构.指把要传输的数据(消息)放在队列中,用队列机制来实现消息传递--生产者产生 ...

  4. mq系列传感器的程序_消息中间件(一)MQ详解及四大MQ比较

    一.消息中间件相关知识 1.概述 消息队列已经逐渐成为企业IT系统内部通信的核心手段.它具有低耦合.可靠投递.广播.流量控制.最终一致性等一系列功能,成为异步RPC的主要手段之一.当今市面上有很多主流 ...

  5. mq数据写到oracle,MQ+ORACLE 的问题

    丁香的智慧 多谢你的分析.我现在的情况是服务器内存有点紧张,交换空间分了16G,每天使用率都在增长,我不得不定时(比如两周)重启一下数据库释放内存. 最近几天在用以下SQL监控v$process视图中 ...

  6. linux mq发送测试消息,WebSphere MQ测试常用指令

    测试1 本地通道测试 1.  使用mqadmin用户登录 2.  执行crtmqm -q TEST_QM,建立测试用的消息管理器. 3.  执行strmqm TEST_QM,启动测试用的消息管理器. ...

  7. linux安装mq报5724,linux下MQ简单配置手册.doc

    精品 消息发送涉及到的队列及通道示意图: 定义发送方为A,接收方为B,下面是建立A向B发送消息的单向配置. 发送方A的配置 1. 在发送方A创建队列管理器QM_A: [[email protected ...

  8. (十四)消息中间件MQ详解及四大MQ比较

    一.消息中间件相关知识 1.概述 消息队列已经逐渐成为企业IT系统内部通信的核心手段.它具有低耦合.可靠投递.广播.流量控制.最终一致性等一系列功能,成为异步RPC的主要手段之一.当今市面上有很多主流 ...

  9. MQ详解及四大MQ比较

    一.消息中间件相关知识 1.概述 消息队列已经逐渐成为企业IT系统内部通信的核心手段.它具有低耦合.可靠投递.广播.流量控制.最终一致性等一系列功能,成为异步RPC的主要手段之一.当今市面上有很多主流 ...

最新文章

  1. iOS_Spring自动生成Model,Service,Controller 之 介绍
  2. Ubuntu安装yum失败-2
  3. linux模拟主机宕机,AIX HA模拟宕机--维护磁带机
  4. 记录 之 TypeError: ‘int‘ object is not subscriptable
  5. 一、iVX简介(IVX 快速开发教程)
  6. 【二分】雪(luogu 7405)
  7. [vue] 说说你对provide和inject的理解
  8. java程序员_Java和Python的区别 好程序员帮大家解读
  9. 房地产建筑行业HTML5模板
  10. 计算机导论第4版第五章答案,《计算机导论》习题答案.doc
  11. 白日门传奇手游源码端
  12. 项目日报模板_知名房企的精细化施工管理,从项目日常到施工图,全方位涵盖...
  13. GD32F103替换STM32F103
  14. MySQl学习(从入门到精通 1.1)
  15. ISO8601标准时间格式
  16. 出入库管理系统-精致版
  17. 解决:idea运行scala程序,报错:Error:scalac: bad option: -make:transitive
  18. 【UE】Unreal Engine虚幻引擎自己的入门记录
  19. PC安装安卓系统模拟器
  20. android app 自动更新,app升级项目,新增强制更新(可静默),支持热更新(wgt),可支持高版本安卓系统...

热门文章

  1. 大数据学习笔记:ZooKeeper练习
  2. Python学习笔记:创建进程
  3. 【SPOJ COT2】Count on a tree II,树上莫队
  4. kubectl apply -f_新车 | 新款捷豹F-PACE登陆广州车展!内外提升十分明显
  5. 【英语学习】【医学】Unit 05 The Digestive System
  6. Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (9) - 流水线前端/微指令队列循环流侦测器LSD
  7. centos php mcrypt_面试经常问你什么是PHP垃圾回收机制?
  8. 歌德语言证书c1考什么,Goethe-Zertifikat C1 (歌德中级证书C1)考试细则 2010.2.1版.pdf...
  9. UE3 性能、分析及优化
  10. 周口a货翡翠,泸州a货翡翠