zoukankan      html  css  js  c++  java
  • 菜鸟刷面试题(二、RabbitMQ篇)

    目录:

    • rabbitmq 的使用场景有哪些?
    • rabbitmq 有哪些重要的角色?
    • rabbitmq 有哪些重要的组件?
    • rabbitmq 中 vhost 的作用是什么?
    • rabbitmq 的消息是怎么发送的?
    • rabbitmq 怎么保证消息的稳定性?
    • rabbitmq 怎么避免消息丢失?
    • 要保证消息持久化成功的条件有哪些?
    • rabbitmq 持久化有什么缺点?
    • rabbitmq 有几种广播类型?
    • rabbitmq 怎么实现延迟消息队列?
    • rabbitmq 集群有什么用?
    • rabbitmq 节点的类型有哪些?
    • rabbitmq 集群搭建需要注意哪些问题?
    • rabbitmq 每个节点是其他节点的完整拷贝吗?为什么?
    • rabbitmq 集群中唯一一个磁盘节点崩溃了会发生什么情况?
    • rabbitmq 对集群节点停止顺序有要求吗?

    rabbitmq 的使用场景有哪些?

    1、异步调用

    2、应用解耦

    3、流量削峰

    4、数据冗余

    5、延迟队列

    6、分布式事务

    ......

    rabbitmq 有哪些重要的角色?

    1、生产者:发送消息的角色。

    2、消费者:接收并处理消息的角色。

    3、消息代理者:传递消息的角色,本身不产生和消费消息。

    rabbitmq 有哪些重要的组件?

    1、生产、消费者

    2、消息、信道

    3、交换器、路由键、队列、broker

    rabbitmq 中 vhost 的作用是什么?

    vhost可以看作是小型的RabbitMQ服务器,他拥有自己独立的交换器、队列、绑定关系、以及权限管理

    客户端连接RabbitMQ时必须制定一个vhost,默认使用"/"

    也就是说一个RabbitMQ服务可以拥有很多个子RabbitMQ服务,这些字RabbitMQ服务可以为其它很多应用程序提供服务;这样可以减少RabbitMQ服务器搭建的成本

    rabbitmq 的消息是怎么发送的?

    生产者通过信道将消息发送到交换器,然后交换器再根据路由键将消息路由到对应的队列中。

    rabbitmq 怎么保证消息的稳定性?

    对于发送方来说,可以使用事务或更轻量级别的发送方确认机制来保证消息达到RabbitMQ服务器。

    对于接收方来说,autoAck设置成false,在处理完消息后再手动确认

    rabbitmq 怎么避免消息丢失?

    1、队列的durable设为true,将消息持久化到磁盘。

    2、采用消费者确认模式。

    3、对RabbitMQ集群,通过镜像队列备份数据。

    4、可以将requeue设置为true,将漏处理的消息重新入队。

    要保证消息持久化成功的条件有哪些?

    1、队列必须为持久化的

    2、消息的投递模式必须是持久化的,deliveryMode=2

    3、消息已到达持久化的交换器和队列

    rabbitmq 持久化有什么缺点?

    持久化会多一次IO操作,在一定程度上会降低RabbitMQ的吞吐量,如果不计服务器成本的话可以考虑使用固态硬盘(SSD)来优化

    rabbitmq 有几种广播类型?

    fanout、direct、topic。

    rabbitmq 怎么实现延迟消息队列?

    采用死信交换器,也有些人叫做死信队列,在创建队列时指定x-message-ttl、x-dead-letter-exchange这两个参数来实现(利用消息过期会进入死信队列的特性)。

    rabbitmq 集群有什么用?

    1、不仅可以线性扩展RabbitMQ的吞吐量。

    2、还可以使用镜像队列来降低消息丢失的风险。

    3、以及某台服务器出现问题后RabbitMQ还能正常的提供服务。

    rabbitmq 节点的类型有哪些?

    磁盘节点和内存节点:

    1、磁盘节点主要用于持久化交换器、队列及用户角色权限等

    2、内存节点主要用于读写RabbitMQ消息,但消息都存储在内存中,服务器重启则消息丢失;但其性能高于磁盘节点。

    rabbitmq 集群搭建需要注意哪些问题?

    1、保证各个节点的cookie一致,否则节点之间无法通信。

    2、必须存在一个磁盘节点,高可用的话最好一个以上

    rabbitmq 每个节点是其他节点的完整拷贝吗?为什么?

    不是;集群节点不对其它节点的队列进行复制,只会存储队列所在节点及元数据

    rabbitmq 集群中唯一一个磁盘节点崩溃了会发生什么情况?

    虽然还能够正常的读写消息,但无法创建交换器、队列、绑定关系以及用户和用户的权限角色等

    rabbitmq 对集群节点停止顺序有要求吗?

    停止服务:应当先关闭内存节点,再关闭磁盘节点。先关闭磁盘节点的话会导致无法创建交换器、队列、绑定关系,从而可能会导致数据丢失。

    启动服务:先启动磁盘节点,再启动内存节点。

  • 相关阅读:
    003 01 Android 零基础入门 01 Java基础语法 01 Java初识 03 Java程序的执行流程
    002 01 Android 零基础入门 01 Java基础语法 01 Java初识 02 Java简介
    001 01 Android 零基础入门 01 Java基础语法 01 Java初识 01 导学
    001 Android Studio 首次编译执行项目过程中遇到的几个常见问题
    Dora.Interception,为.NET Core度身打造的AOP框架 [2]:以约定的方式定义拦截器
    Dora.Interception,为.NET Core度身打造的AOP框架 [1]:更加简练的编程体验
    监视EntityFramework中的sql流转你需要知道的三种方式Log,SqlServerProfile, EFProfile
    轻量级ORM框架——第二篇:Dapper中的一些复杂操作和inner join应该注意的坑
    轻量级ORM框架——第一篇:Dapper快速学习
    CF888G Xor-MST(异或生成树模板)
  • 原文地址:https://www.cnblogs.com/bzfsdr/p/12041579.html
Copyright © 2011-2022 走看看