消息队列是一种在分布式系统中用于消息传递的中间件技术,主要的用途有三个,分别是削峰,异步,解耦
削峰
消息队列本身可以作为一个缓冲,将请求的消息缓存在消息队列端,而不会直接让这些请求访问到服务端,这样当请求的峰值一下子增高了就能很好的缓解服务器的压力
异步
假设一个场景,一个用户向要下单,向订单服务发起请求:
订单服务先是发起消息给支付,收到支付成功的消息后再发起消息给库存,收到库存处理完成的消息后再发送消息给物流,前前后后需要200+200+200,总共600ms,这还只是一个用户那如果用户一旦变多,那么系统带来的延迟将会极大的降低用户的体验。
引入消息队列后:
那么支付,物流,库存只需要监听订单消息即可,监听到了就根据各自的执行逻辑各自执行了,这就是消息队列支持异步的功能。
解耦
想象一下如果两个本就不相关的服务,由于和同一个生产者同步发收消息,如果其中一个服务挂掉了,那另一个服务必须等待上一个服务完成后才可执行,本身就不太合理,而且如果有新的服务增加了,后续消费者的代码为了适合新增的服务接口,不得不再加上发送消息给新增服务的代码,是不是很麻烦,可扩展性很差:
但引入了消息队列,各个服务之间相互独立,只需要关注于消息,如果有新的服务增加,那么只需要订阅消息队列里的消息就可以了:
总而言之,通过使用消息队列能够让各个服务之间相互独立,从而提高了系统的可维护性,可扩展性,容错性