当前位置: 首页 > 后端技术 > Java

面试官还问我为什么用MQ,还好看了参考答案

时间:2023-04-01 19:30:50 Java

互联网公司的项目没有用到MQ(消息队列)。简历中写项目中使用了MQ也是亮点之一。.既然写好了,面试官就会问,你对MQ了解多少?一个啤酒肚、格子衬衫、发际线严重后退的中年男人,手里拿着保温瓶,腋下夹着MacBook,正向你走来。面试官:小伙子,我在你的简历上看到项目中使用了MQ。为什么在项目中引入MQ?万马奔腾心头一闪,要我介绍MQ吗?CTO让我们用,我们就用!话虽如此,但你这样直接回答,肯定会让你回去等通知的。其实这个问题就是让你回答MQ的作用是什么?MQ的三大功能:解耦、异步、调峰。如果直接回答这三个函数,会给面试官一种死记硬背的嫌疑,所以要结合实际项目来分析。1.解耦面试官你好,我们公司是做电子商务系统的。核心是交易服务,它调用了另外三个服务,订单服务,库存服务,仓储服务。如果这三个服务其中一个不可用,交易服务就不能正常运行,所以交易服务与其他三个服务是强耦合的。引入MQ后,事务服务只与MQ交互,只需要将消息发送给MQ即可,无需关心其他三个服务是否可用。此时事务服务与其他三个服务弱耦合,降低了耦合度。即使其他三个服务暂时不可用,也不会影响事务服务的运行,只要其他服务在运行,消费MQ中的消息即可。2、异步不引入MQ时,事务服务需要同步调用三个服务。如果调用一个服务需要1秒,那么同步调用三个服务需要3秒。引入MQ后,全部改为异步调用,耗时不到1秒,大大提高了接口的性能。3.调峰如果一秒钟有5000笔交易同时进来,但是订单服务每秒只能处理100笔交易,那么接下来的4900笔交易就会失败。引入MQ后,交易服务可以先将交易数据发送给MQ,订单服务可以慢慢从MQ中拉取交易信息进行处理。这可以防止突然的流量使服务器不堪重负。采访者:小伙子,有件事。看来准备工作已经很充分了,那你知道引入MQ的弊端吗?MQ不可能是所有的优点吧?当然。我认为引入MQ之后,会有以下三个缺点。1.系统可用性降低本来整个系统有四个服务,我们只需要保证这四个服务可用即可。现在又引入了一个MQ,我们还要保证MQ的可用性,所以整个系统的可用性就降低了。2.增加了系统的复杂度本来交易服务是同步调用其他三个服务的。如果其他三个服务不可用,事务服务可以立即感知到。引入MQ后,整个系统的稳定性必须由MQ来保证。这时候我们就要考虑如何避免发送给MQ的消息丢失?顺序消费的问题在于,同一笔交易的订单消息应该先于订单取消消息处理。重复消费的问题是同一个订单交易的消息可能会被处理多次。当然,每个问题都有特定的解决方案。可以使用MQ集群避免消息丢失,顺序消费可以将消息发送到同一个分区,重复消费可以在消费端进行幂等处理。这里就不细说了,后面会讲到各个MQ不同的具体实现方式。3.数据一致性问题当服务被同步调用时,我们也可以使用本地事务来控制数据的一致性。但是引入MQ之后,服务之间的调用都是异步的,就没有办法使用本地事务,也就无法实现数据的强一致性。比如调用订单服务下单成功,调用库存服务扣库存失败会导致超卖,属于严重的线上事故。这个时候怎么办?可以使用MQ事务消息,相当于同步调用,会严重降低性能。分布式事务也可以用来实现数据的最终一致性,但是无法实现强一致性。面试官心里竖起了大拇指,小伙子可以的,明天来上班吧!我在之前公司的工作还没交,要不我再等两周?是不是觉得工资太低了,我让HR给涨工资,明天一定要来。