消息队列的理解

160 阅读2分钟
1.什么是消息队列
:消息队列是消息在传输过程中储存消息的容器。消息队列管理器在将消息从它的源传递到目标时充当着中间人的角色。如果发送消息过程中,接受者不能够接收消息,那么消息队列会保留消息。

2.为什么需要消息队列
:消息队列主要有三个作用:异步,削峰,解耦。

主要是为了解决高并发情况下,由于大量的请求一起发送,这时候同步执行的话,往往会阻塞程序,因此我们需要进行异步处理,缓解系统压力,也可以削峰。

另外,如果几个系统在处理业务的时候耦合性很大,那么只要其中一个系统出问题,其他系统也无法工作,消息队列还可以解耦和。

因此消息队列是大型分布式系统中必不可少的中间件,一般用到的消息队列有rabbitMQ,redis.

当然,消息队列也有缺点

系统可用性降低:比如如果用redis来作为中间人,如果redis挂了,那么整个系统就不能用了,解决方法可以考虑用集群。

系统复杂度增加:多增加了MQ队列,使得整个系统的复杂度提高。

一致性问题:操作多个系统的时候,可能会出现有一两个系统操作不成功过就返回数据,结果造成一致性问题。

3.rabbitmq跟redis来作消息队列的区别?

1.可靠性:

redis:
没有相应机制保证消息的消费,当消费者消费失败,消息丢失

rabbitmq:
具有消息消费确认,如果消费者消费失败,会自动返回队列中

2.持久化:

redis:
将整个redis实例持久化在磁盘中

rabbitmq:
队列跟消息都能够选择是否要实现持久化

3.消费者负载均衡:

redis:
不提供

rabbitmq:
根据消费者情况,进行消息的负载均衡

应用场景分析

Redis:轻量级,高并发,存取快

即时数据分析、秒杀计数器、缓存等

RabbitMQ:重量级,高并发,异步

批量数据异步处理、并行任务串行化,高负载任务的负载均衡等

更多技术咨询可关注:gzitcast