01.消息队列介绍

什么是消息队列

  1. 英文全称Message Queue,简称MQ
  2. MQ是一个单独的服务(单独部署跑在某台电脑上)
  3. 使用队列这种数据结构进行存储数据
  4. 简单来说就是一种数据的容器,使用队列这种数据结构进行存储
  5. 把数据放在MQ中被称之为生产者
  6. 把数据从MQ中拿走称之为消费者

MQ的诞生历程

  1. 1983年在麻省理工一个印度人开发了第一个MQ叫TIB(开了家公司),此时的TIB多用于金融行业
  2. 1994年路透社收购了TIB的公司
  3. IBM研发了自己的MQ
  4. 微软研发了自己的MQ
  5. 2001年SUN公司出台了JMS规范(JMS规范只适用于Java)
  6. 2006出现了AMQP(Advanced Message Queuing Protocol)协议
  7. 2007年有公司基于AMQP协议开发了RabbitMQ的第一个版本(RabbitMQ使用Erlang语言编写)

为什么使用MQ(使用场景)

  1. 异步处理
  2. 架构解耦
  3. 削峰填谷/流量削峰

异步处理

比如有如下注册服务:
在这里插入图片描述

当前系统存在的两个问题:

用户体验问题:当前系统只有在加积分完毕后才通知用户注册完毕。如果使用异步那么可以做到先通知用户注册成功然后在加积分。

性能问题:当前系统需要60ms完成操作,但是异步调用可能只需要30ms。

系统解耦

在说系统解耦之前先了解下什么是耦合,耦合是系统内部或者系统之间存在相互作用,相互影响和相互依赖。

在分布式系统中,一个业务可能是由多个系统完成的(比如说电商的退货)
在这里插入图片描述
改变订单状态——>增加库存——>退钱——>通知退货成功。这是退货的流程,但是这些流程本质上顺序并不重要,也就是依赖关系并不强,如果引入MQ完全可以做到先通知在增加库存修改订单状态等操作,还可以做到增加库存失败等操作不影响其他操作。
引入MQ后系统架构如下:
在这里插入图片描述
这样的各个系统只要维护自己系统与MQ的关系即可,不需要关系其他系统如何,比如说如果通知系统挂了也完全不会影响到支付系统退钱。

流量削峰

在很多电商系统中,会有一个请求非常高的情况比如说京东的618,淘宝的双11。普通的服务器肯定是无法承载这么高的流量,如果通过加服务器的方式来解决问题,那么在活动过后会造成硬件浪费的情况。

为了解决这个问题我们可以使用MQ将流量全部承接下来,然后让各个子系统慢慢进行处理。

总结使用场景

  1. 对于数据量大或者处理耗时长或非重点业务的操作,我们可以引入 MQ 实现异步通信,减少客户端的等待,提升响应速度。
  2. 对于改动影响大的系统之间,可以引入 MQ 实现解耦,减少系统之间的直接依 赖。
  3. 对于会出现瞬间的流量峰值的系统,我们可以引入 MQ 实现流量削峰,达到保 护应用和数据库的目的。

主流的消息队列对比在这里插入图片描述

使用消息队列带来的问题

  • 数据丢失问题
  • 数据重复问题
  • 如何保证消息顺序性
  • 如何保证一致性
  • MQ高可用问题等
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值