RabbitMQ应用场景

1、异步处理

假设想象一下我们做一个商城项目,在用户支付模块中,可能会涉及到其它业务,比如:积分折扣、消费券、短信验证等功能。我们传统的执行步骤是逐步执行,也就是说当用户点击支付 ----> 积分折扣 ----> 消费券 ----> 短信验证 ----->支付完成,用户需要等待每个业务执行完毕才能支付成功!假设我们从点击支付 -----> 支付成功消耗时间为100/ms,后面我们每新增一个业务就会多耗时50/ms,上述的流程大概会耗时250/ms!如果说以后业务更多的话,那么用户支付订单的时间会越来越长,这样大大影响了用户的体验!参照下图理解

我们使用消息中间件进行异步处理,当用户下单支付同时我们创建消息队列进行异步的处理其它业务,在我们支付模块中最重要的是用户支付,我们可以将一些不重要的业务放入消息队列执行,这样可以大大添加我们程序运行的速度,用户支付模块中也大大减少了支付时间,为用户添加了更好的体验。其它模块与其思想一致,就比如说用户注册!

2、流量消峰 

假设我们有一个订单系统,我们的订单系统最大承受访问量是`每秒1万次`,如果说某天访问量过大我们的系统承受不住了,会对服务器造成宕机,这样的话我们的系统就瘫痪了,为了解决该问题我们可以使用中间件对流量进行消峰

未加入中间件之前,用户直接访问的是订单系统

加入中间件之后,用户直接访问的是中间件,通过中间件对用户进行消峰,好处是可以避免系统的宕机瘫痪,坏处是系统速度变慢,但是总比不能使用好

3、应用解耦 

我们以商城项目为例,订单系统耦合调用支付、库存、物流系统,如果某天其中一个系统出现了异常就会造成订单系统故障!使用中间件后订单系统通过`队列`去访问支付、库存、物流系统就不会造成上述的问题,因为订单系统执行完成才会发消息给队列,接下来的任务就交给队列完成,队列会监督各个系统完成,如果完不成队列会一直监督,直到完成为止!所以说使用中间件后不会造成一个子系统出现故障而造成整个系统故障

相关推荐

  1. 深入理解RabbitMQ:配置与应用场景详解

    2024-03-15 00:56:01       50 阅读
  2. Android intent 应用场景

    2024-03-15 00:56:01       33 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-15 00:56:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-15 00:56:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-15 00:56:01       82 阅读
  4. Python语言-面向对象

    2024-03-15 00:56:01       91 阅读

热门阅读

  1. sql语句

    2024-03-15 00:56:01       39 阅读
  2. 零基础入门多媒体音频(1)-音频基础

    2024-03-15 00:56:01       43 阅读
  3. go的slice学习

    2024-03-15 00:56:01       41 阅读
  4. 分布式锁解决方案

    2024-03-15 00:56:01       40 阅读
  5. Easy Conan + CMake template for C++ projects

    2024-03-15 00:56:01       43 阅读
  6. MFC 实现延时,并且进行消息分发,不阻塞

    2024-03-15 00:56:01       43 阅读
  7. 【C++】vector的底层剖析以及模拟实现

    2024-03-15 00:56:01       43 阅读
  8. 利用装饰器模式使用第三方库

    2024-03-15 00:56:01       42 阅读
  9. Vue template到render过程,以及render的调用时机

    2024-03-15 00:56:01       43 阅读