目录
- 一、RabbitMQ的使用场景有哪些?
- 二、RabbitMQ有哪些重要的角色?
- 三、RabbitMQ有哪些重要的组件?
- 四、RabbitMQ中vhost的作用是什么?
- 五、RabbitMQ的消息是怎么发送的?
- 六、RabbitMQ是怎么保证消息的稳定性的?
- 七、RabbitMQ怎么避免消息丢失?
- 八、RabbitMQ要保证消息持久化成功的条件有哪些?
- 九、RabbitMQ持久化有什么缺点?
- 十、RabbitMQ有几种广播类型?
- 十一、RabbitMQ怎么实现延迟消息队列?
- 十二、RabbitMQ集群有什么用?
- 十三、RabbitMQ结点的类型有哪些?
- 十四、RabbitMQ集群搭建需要注意哪些问题?
- 十五、RabbitMQ每个节点是其它节点的完整拷贝么?为什么?
- 十六、RabbitMQ集群中唯一一个磁盘节点崩溃了会发生什么情况?
- 十七、RabbitMQ对集群节点停止顺序有要求么?
一、RabbitMQ的使用场景有哪些?
1、抢购活动,削峰填谷
2、延迟信息处理
3、解耦系统,通过发布订阅模式,将各个服务之间分离开来。
二、RabbitMQ有哪些重要的角色?
主要有三个角色:生产者、消费者、代理
1、生产者:负责信息的生成和发布
2、消费者:负责信息的接收和处理
3、代理:RabbitMQ本身,它主要就是负责和“快递”类似的工作,将生产者发布的信息保存好,然后发送给消费者
三、RabbitMQ有哪些重要的组件?
1、Connectionfactory(连接管理器):应用程序与RabbitMQ之间建立的连接管理器,程序代码中使用。
2、Channel(信道):消息推送使用的通道。
3、Exchange(交换器):用于接受和分配消息。
4、Queue(队列):用于存储生产者的消息。
5、Routingkey(路由键):用于把生产者的数据分配到交换器上。
6、BindingKey(绑定键):用于把交换器的消息绑定到队列上。
四、RabbitMQ中vhost的作用是什么?
每个RabbitMQ中都有很多个vhost,我们称之为虚拟主机。它就是一个mini的RabbitMQ,它有自己的队列,交换器和绑定,拥有独立的权限机制。
五、RabbitMQ的消息是怎么发送的?
首先客户端需要和RabbitMQ服务器建立TCP连接,然后通过认证后,两者之间就会成一条amqp信道,信道的编号是唯一的。随后消息的发布和订阅就可以在信道中完成了。
六、RabbitMQ是怎么保证消息的稳定性的?
1、它提供了事务的功能。
2、将channel设置为confirm(确认)模式。
七、RabbitMQ怎么避免消息丢失?
1、把消息持久化磁盘,防止服务器重启后内存中的消息不丢失。
2、每个消息中至少含有一个物理磁盘,保证消息落入磁盘。
八、RabbitMQ要保证消息持久化成功的条件有哪些?
1、声明队列必须设置为持久化(durable设置为true)
2、消息推送投递模式必须设置为持久化(deliveryMode设置为2)
3、消息已经到达持久化交换器
4、消息已经到达持久化队列
只要达成上述四个条件,就能保证消息持久化成了
九、RabbitMQ持久化有什么缺点?
RabbitMQ持久化的处理方案是将消息存入磁盘中,所以会降低服务器的吞吐量。使用ssd固态硬盘可以有效的缓解这种问题。
十、RabbitMQ有几种广播类型?
主要有四种类型
1、direct:RabbitMQ的默认类型,就是普通的发布订阅模式,消息发布者发出的一条消息,只要被一个消息订阅者订阅到了,那该条消息就清除出消息队列,其它的订阅者就不能再订阅到该消息了。也就是说一条消息只能使用一次。
2、Header:该模式和direct模式类似,只是性能较差,一般不怎么使用。
3、Fanout:该模式是分发模式。在该模式下发布者发布的消息,会被所有订阅方都接收到。
4、Topic:该模式是匹配订阅模式。发布者发布的消息通过正则表达式匹配到所有的符合条件的消息订阅者,然后将消息发送给她们。
十一、RabbitMQ怎么实现延迟消息队列?
通过消息过期后进入死信交换器,再由交换器转发到延迟消费队列,实现延迟功能;
使用 RabbitMQ-delayed-message-exchange 插件实现延迟功能
十二、RabbitMQ集群有什么用?
集群主要有以下两个用途:
高可用:某个服务器出现问题,整个 RabbitMQ 还可以继续使用;
高容量:集群可以承载更多的消息量。
十三、RabbitMQ结点的类型有哪些?
主要有两种类型的节点
1、磁盘节点:将消息存入磁盘中,是RabbitMQ消息持久化的必要选择。
2、内存节点:将消息放在内存中,读取速度比较快。
十四、RabbitMQ集群搭建需要注意哪些问题?
1、每个RabbitMQ之间必须要用“–link”进行连接。
2、每个RabbitMQ中的erlang cookie属性配置必须一致,这个属性就是各个RabbitMQ之间的认证秘钥,只有它一致了,各个RabbitMQ之间才能互相通信共享信息。
3、集群中必须要有一个磁盘节点,这是为了防止消息的丢失。
十五、RabbitMQ每个节点是其它节点的完整拷贝么?为什么?
并不是其他节点的完整拷贝。
如果每个节点都是其他节点的完整拷贝,那么存储的信息上限就相当于只有一个RabbitMQ的信息存储量,并且性能最多也只能保持和单节点相同的性能甚至是更糟,这样就不能发挥集群能带来的消息容量提升和处理消息能力的提升这两个优势了。
十六、RabbitMQ集群中唯一一个磁盘节点崩溃了会发生什么情况?
唯一一个磁盘节点崩溃了,集群仍然可以使用,但不能对集群进行任操作。
十七、RabbitMQ对集群节点停止顺序有要求么?
有要求的,必须要先停止RabbitMQ集群中的内存节点,然后在停止磁盘节点,这样才能保证消息不丢失。