消息队列的作用:1,是减少相应所需的时间和削峰2,降低系统耦合性(解耦或提升系统的可拓展性)
当我们不使用消息队列的时候,所有用户的请求都会直接落到服务器上,然后通过数据库或者缓存相应,假如在高并发的环境下,如果没有缓存或者数据库承受不了那么大的压力的话,就会造成响应速度缓慢,甚至造成数据库宕机。因此这时候如果使用消息队列,用户发送的请求数据发送给了消息队列之后就可以立即返回,再由消息队列的消费者进程从消息队列中获取数据,异步写入数据库。由于消息队列服务器的处理速度大于数据库,因此响应速度大幅度提高。
(图片来自于网络)
另外消息队列还具有一定的削峰的作用——通过异步处理,将短时间内高并发产生的事务消息存储在消息队列当中,从而削平高峰期的并发事务。比如一些电商网站的秒杀和促销活动都是用消息队列来缓解对系统的冲击,当然这时用户请求的压力也就变成了消息队列的压力。
(图片来自于网络)
同样的消息队列还可以降低系统的耦合性,就像我们知道如果模块之间不存在直接的调用,那么新增的模块就会对其他的模块的影响减少,这样系统的可拓展性就更好。生产者发送信息到消息队列当中去,接收者负责处理消息,需要消费的系统直接去消息队列当中去取即可,这样就不需要和其他系统有耦合冲突,就提升了系统的拓展性。
当然消息队列也不是没有缺点的:
1.首先就是系统的可用性降低了,在加入mq之前,你不用去考虑消息的丢失的情况,因为当时的请求和相应都是同步的。但是在加入mq之后,就需要去考虑消息丢失或者mq挂掉的情况。
2.加入mq之后,需要保证消息不会被重复消费(重点,也就是一定要保持幂等性),处理消息丢失,保证消息的顺序阅读。
3.一致性,异步处理虽然可以增加相应的速度,但是需要注意消费者消费的信息是否正确和合理。
来源:https://www.cnblogs.com/ffdsj/p/12369951.html