rabbitMQ(四)应用场景

一,服务解耦

两个高耦合的服务,通过消息中间件的使用,从而变成低耦合。

例子:订单系统需要和库存系统配合实现业务。

 

订单系统的业务需要使用到库存系统的服务,但是,当使用库存系统出现错误,或者库存系统某一段时间内,不可用,那么随之造成的结果是,订单系统也变成不可用了。

引入消息队列后:

订单系统把订单信息发送到消息队列里边,即可给客户反馈下单操作完成,不需要等待库存系统的响应。同样的,库存系统只需要负责从消息队里里边取出信息即可,如果在处理过程中发生错误了,只需要再通知客户即可。当客户系统不可用的时候,造成的结果也只是消息堆积,等待库存系统恢复,即可再从消息队列里获取信息,处理业务。在库存系统不可以的期间,订单系统还能继续下单往消息队列写入订单的消息,不会影响到订单系统的业务,这就是解耦合带来的好处。

 

二,异步通信

例子:客户注册成功之后发送短信通知

1.串行处理

 

2.并发处理

 

3.消息队列异步处理

 

通过使用消息队列来异步处理,使得程序的响应时间极大地缩短。

 

三,消息分发

与第二点的异步通信类似,发送邮件和发生短信的服务监听着消息队列,当队列里有消息的时候,就从里边拿出信息,然后处理各自的业务(也可以看做消息队列把消息分发到与它关联的服务)。

 

四,接口限流

例子:在秒杀商品的场景下,存在着先取出库存再进行判断,最后再进行减1的更新操作,在高并发的情况下,这些业务操作会给系统带来诸多的问题。比如,商品超卖、数据不一致、用户等待时间长、系统接口挂掉等现象。

使用消息队列后:

,当前端产生高并发请求时,并不会像“无头苍蝇”一样立即到达后端系统接口,而是像每天上班时的地铁限流一样,将这些请求按照先来后到的规则加入RabbitMQ的队列,即在某种程度上实现“接口限流”。

 

五,延时处理

例子:抢票成功后30分钟内未付款则撤销。传统的做法一般是结合定时器去做,当30分钟的时候,通过定时器去查询数据库的票是否已经付款。但是,在大数据量,高并发的情况下,每一张单都有一个定时器,在某个时候去查询数据库信息,这无疑会给系统带来巨大的压力。可以通过使用消息队列来解决这个延时处理的问题。

像一些是否确认下单,订单是否确认提交等等操作也可以用消息队列来解决时延问题。