其实就是问你消息队列都有哪些使用场景,然后你项目里具体是什么场景
MQ应用场景
1. 异步
用户调用一个接口的时候,可能该接口调用了别的方法。例如:用户注册的时候,后台可能需要调用:查询数据库,插入数据库,发送邮件,积分增加等...但是用户可能并不需要后台将所有的任务执行完毕,那么此时加入mq队列,用户就能很快得到注册成功的响应而去做一些别的事情。mq的机制又能保证最终的一致性,所以使用起来很安全很稳定。
2. 解耦
系统A要发送一个消息到多个系统,如果此时每增加一个系统,系统A都需要通过修改源码来增加接口,此时耦合非常高,但是如果中间使用消息队列的话,系统只需要发送一次到消息队列,别的系统就能复用该信息,当增加或删除系统调用接口的时候,不需要额外的更新代码。
3. 流量消峰
何为消峰,就是当系统压力过大的时候,让系统压力减小。假如数据库的读写每秒3000,在高峰期,系统的访问达到了每秒10000。此时由于加入了消息队列,所以不会出现激增的访问导致系统奔溃。(注意,消峰并不会让用户的等待时间减少,所以一般会跟异步搭配来使用)
MQ的缺点
1. 降低可用性
如果mq挂掉了,那么系统之间的通信就中断了,导致整个系统全部挂掉
2. 一致性问题
A系统处理完了发送到消息队列后直接返回成功了,用户以为你这个请求就成功了;但是问题是,其他系统消费该消息后,如果当中有一个系统出现了问题,导致数据丢失。最后就会发生数据不一致等问题。
项目中应用场景
订单系统,每次下一个新的订单时,就会发送一条消息到MQ中,后台有一个库存系统负责获取消息然后更新库存。