为什么要使用消息队列呢?

消息队列主要有三个主要用途,以下以电商系统的下单为例进行说明:

  • 解耦:在引入消息队列之前,完成下单后,订单服务需要调用库存服务减少库存,调用营销服务增加营销数据等。引入消息队列后,可以将订单完成的消息放入队列中,让下游服务自行处理,从而实现订单服务与其他服务的解耦合。
  • 异步:在订单支付后,需要执行库存扣减、积分增加、消息发送等操作。这样的操作链路较长,导致响应时间延长。通过引入消息队列,除了更新订单状态需要同步处理外,其他操作都可以异步进行,从而降低响应时间。
  • 削峰:消息队列常用于削峰操作,例如在秒杀系统中,平时流量较低,但在秒杀活动期间,流量会急剧增加。而服务器、Redis、MySQL等各自的承载能力有限,直接承受全部流量可能导致系统崩溃。通过将请求放入队列中,只处理服务能够处理的流量,可以有效抵御短时间内的大流量压力。

解耦、异步和削峰是消息队列的三个主要作用。

标签: java, Java面试题, Java问题合集, Java编程, Java问题精选, Java常见问题, 计算机网络, 计算机网络面试题