RabbitMq做为一个成熟的消息队列商业产品,最早是为了给金融系统提供一种消息总线的功能,后来被广泛应用于各种中小型的网站中,RabbitMq的设计初衷就是为了让消费者和生产者解耦,可以插拔式的添加或减少任何一个生产者或消费者,并且生产者和消费者角色可以互换,一个rabbitMq的客户端可以既是生产者也是消费者。
消息队列的作用:
1.异步处理
2.应用解耦
3.流量削峰
4.日志采集
5.延时任务
正是消息队列的诸多好处,所以在分布式的大环境下,变的越来越重要。
先说一下为什么需要一个成熟的消息队列产品,在各种语言中,都可能原生的就有阻塞队列,很容易就可以实现一个生产者消费者模型,一般我们在学多线程时都会学习生产者消费者模型。但是我们自己实现的消费者生产者有哪些问题呢?
1.如果支持暂存消息,存在内存是否会占用我们服务器的内存,存在磁盘是否会影响速率。
2.分布式环境下,是否每一个服务里面都需要一个生产者消费者模型。
3.对于消息发送失败,消息应答是否有处理
4.各种类型的消息,是否支持发布/订阅,广播等模式,以满足业务的多样性
5.是否支持消息的持久化
6.往往在对性能要求很高的场合,生产者生产完消息后,消费者需要第一时间的接收到消息并处理消息,商业的消息队列 产品往往对性能进行了很大的优化,例如rabbitmq在tcp的基础上建立了channel,多路复用。