1.消息队列的应用场景有哪些?
答:消息队列的应用场景如下。
- 应用解耦,比如,用户下单后,订单系统需要通知库存系统,假如库存系统无法访问,则订单减库存将失败,从而导致订单失败。订单系统与库存系统耦合,这个时候如果使用消息队列,可以返回给用户成功,先把消息持久化,等库存系统恢复后,就可以正常消费减去库存了。
- 削峰填谷,比如,秒杀活动,一般会因为流量过大,从而导致流量暴增,应用挂掉,这个时候加上消息队列,服务器接收到用户的请求后,首先写入消息队列,假如消息队列长度超过最大数量,则直接抛弃用户请求或跳转到错误页面。
- 日志系统,比如,客户端负责将日志采集,然后定时写入消息队列,消息队列再统一将日志数据存储和转发。
2.RabbitMQ 有哪些优点?
答:RabbitMQ 的优点如下:
- 可靠性,RabbitMQ 的持久化支持,保证了消息的稳定性;
- 高并发,RabbitMQ 使用了 Erlang 开发语言,Erlang 是为电话交换机开发的语言,天生自带高并发光环和高可用特性;
- 集群部署简单,正是因为 Erlang 使得 RabbitMQ 集群部署变的非常简单;
- 社区活跃度高,因为 RabbitMQ 应用比较广泛,所以社区的活跃度也很高;
- 解决问题成本低,因为资料比较多,所以解决问题的成本也很低;
- 支持多种语言,主流的编程语言都支持,如 Java、.NET、PHP、Python、JavaScript、Ruby、Go 等;
- 插件多方便使用,如网页控制台消息管理插件、消息延迟插件等。
3.RabbitMQ 有哪些重要的角色?
答:RabbitMQ 包含以下三个重要的角色:
- 生产者:消息的创建者,负责创建和推送数据到消息服务器;
- 消费者:消息的接收方,用于处理数据和确认消息;
- 代理:就是 RabbitMQ 本身,用于扮演“快递”的角色,本身不生产消息,只是扮演“快递”的角色。
4.RabbitMQ 有哪些重要的组件?它们有什么作用?
答:RabbitMQ 包含的重要组件有:ConnectionFactory(连接管理器)、Channel(信道)、Exchange(交换器)、Queue(队列)、RoutingKey(路由键)、BindingKey(绑定键) 等重要的组件,它们的作用如下:
- ConnectionFactory(连接管理器):应用程序与 RabbitMQ 之间建立连接的管理器,程序代码中使用;
- Channel(信道):消息推送使用的通道;
- Exchange(交换器):用于接受、分配消息;
- Queue(队列):用于存储生产者的消息;
- RoutingKey(路由键):用于把生成者的数据分配到交换器上;
- BindingKey(绑定键):用于把交换器的消息绑定到队列上。
运行流程,如下图所示: