Java 最常见的 208 道面试题(135-151)-------RabbitMQ

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 对集群节点停止顺序有要求吗?

对停止顺序有要求,应该先关闭内存节点,然后再关闭磁盘节点。如果顺序相反的话,可能会造成消息丢失

发布了22 篇原创文章 · 获赞 1 · 访问量 1618

猜你喜欢

转载自blog.csdn.net/qq_42029989/article/details/104901094