135.rabbitmq 的使用场景有哪些?
1.跨系统的异步通信,所有需要异步交互的地方都可以使用消息队列
2.多个应用之间的耦合,不需要发送方和接收方同时在线,在企业应用集成中,文件传输,共享数据库,消息队列,远程调用都可以作为集成的方法
3.应用内的同步变异步,如订单处理,可以由前端应用将订单信息放到队列,后端应用从队列里一次获得消息信息,高峰时大量订单可以积压在队列里慢慢处理掉。
4.消息驱动的架构,系统分解为消息队列,消息制造者和消息消费者,一个处理流程可以根据需要拆解成多个阶段,阶段间用队列连接起来
5.应用需要更灵活的耦合方式,如发布订阅
6.跨局域网,甚至跨城市通讯(CDN行业)
136.rabbitmq 有哪些重要的角色?
生产者:消息创建者,负责创建和推送数据到消息服务器
消费者:消息接收方,用于处理数据和确认消息
代理 :RabbitMQ本身 ,用于传递消息
137.rabbitmq 有哪些重要的组件?
ConnectionFactory (连接管理器) : 应用程序与Rabbit之间建立链接的管理器
Channel (信道) : 消息推送的通道
Exchang (交换器) : 用于接受,分配消息
Queue (队列) : 用于存储生产者消息
RoutingKey (路由键) : 把生成者的数据分配到交换器上
BindingKey (绑定建) : 用于把交换器的消息绑定到队列上
138.rabbitmq 中 vhost 的作用是什么?
vhost可以理解为虚拟broker,即mini-RabbitMQ sever。 其内部均含有独立的queue,exchange和binding等,最重要的是,拥有独立的权限系统,可以做到vhost范围的用户控制,从RabbitMQ全局角度,vhost可以作为不同权限隔离的手段(典型的例子,不同的应用可以跑在不同的vhost中)
139.rabbitmq 的消息是怎么发送的?
vhost可以理解为虚拟broker,即mini-RabbitMQ sever。 其内部均含有独立的queue,exchange和binding等,最重要的是,拥有独立的权限系统,可以做到vhost范围的用户控制,从RabbitMQ全局角度,vhost可以作为不同权限隔离的手段(典型的例子,不同的应用可以跑在不同的vhost中)
140.rabbitmq 怎么保证消息的稳定性?
提供了事务的功能
通过将channel设置为confirm(确认)模式。
141.rabbitmq 怎么避免消息丢失?
1.消息持久化
2.ACK确认机制
3.设置集群镜像模式
4.消息补偿机制
142.要保证消息持久化成功的条件有哪些?
1.声明队列必须设置持久化durable设置为true
2.消息推送投递模式必须设置持久化,deliveryMode设置为2(持久)
3.消息已经到达持久化交换器
4.消息已经到达持久化队列
143.rabbitmq 持久化有什么缺点?
持久化的缺点是降低了服务器的吞吐量,使用的是磁盘而非内存存储,从而降低了吞吐量,可尽量使用ssd硬盘来缓解吞吐量的问题
144.rabbitmq 有几种广播类型?
三种广播模式:
1.fanout: 所有bind到此exchange的queue都可以接收消息(纯广播,绑定到RabbitMQ的接受者都能收到消息);
2.direct:通过routingKey和exchange决定的那个唯一的queue可以接收消息;
3.topic: 所有符合routingKey(此时可以是一个表达式)的routingKey所bind的queue可以接收消息;
145.rabbitmq 怎么实现延迟消息队列?
通过消息过期后进入死信交换器,再由交换器转发到延迟队列,实现延迟功能;
使用RabbitMQ-delayed-message-exchange插件实现延迟功能
146.rabbitmq 集群有什么用?
集群主要有两个用途:
1.高可用:某个服务器出现问题,整个RabbitMQ还可以继续使用
2.高容量:集群可以承载更多的消息量
147.rabbitmq 节点的类型有哪些?
磁盘节点:消息会存储到磁盘
内存节点:消息会存储到内存中,重启服务器消失,性能高于磁盘存储
148.rabbitmq 集群搭建需要注意哪些问题?
各节点之间使用“--link”连接,此属性不能忽略
各节点使用的erlang cookie值必须相同, 此值相当于“秘钥功能”,用于各节点的认证
整个集群必须有一个磁盘节点
149.rabbitmq 每个节点是其他节点的完整拷贝吗?为什么?
不是,原因有两个:
1.存储空间的考虑:如果每个节点都拥有所有队列的完全拷贝,这样新增节点不但没有新增存储空间,反而增加了更多的冗余数据;
2.性能的考虑:如果每条消息都需要完整拷贝到每个集群节点,那新增节点并没有提升处理消息的能力,最多是保持和单节点相同的性能甚至是更糟
150.rabbitmq 集群中唯一一个磁盘节点崩溃了会发生什么情况?
如果唯一磁盘节点崩溃了,不能进行以下操作:
不能创建队列
不能创建交换器
不能创建绑定
不能创建用户
不能创建权限
不能添加和删除集群节点
151.rabbitmq 对集群节点停止顺序有要求吗?
对停止顺序有要求,应该先关闭内存节点,然后再关闭磁盘节点。如果顺序相反的话,可能会造成消息丢失