JAVA面试题大全(十二)

1、RabbitMQ 的使用场景有哪些?

  • 跨系统的异步通信,所有需要异步交互的地方都可以使消息队列
  • 多个应用之间的耦合
  • 应用内的同步变异步
  • 消息驱动的架构
  • 跨局域网,甚至跨城市的通讯

2、RabbitMQ有哪些重要的角色? 

RabbitMQ的重要角色主要包括以下几个:

  1. 生产者(Producer):生产者是消息的创建者,它负责创建并发送消息到RabbitMQ的交换机。生产者在发送消息时可以指定消息的Routing Key,以便交换机能够正确地将消息路由到相应的队列。

  2. 消费者(Consumer):消费者是消息的接收方,它订阅一个或多个队列,并从队列中接收消息进行处理。消费者通过信道与RabbitMQ进行通信,获取并处理队列中的消息。

  3. 消息队列(Message Queue):消息队列是一个缓冲区,用于存储待处理的消息。队列按照先进先出的顺序传递消息给消费者。在RabbitMQ中,队列是消息的存放容器,负责保存生产者发送过来的消息,直到被消费者消费。

  4. 交换机(Exchange):交换机是消息的分发中心,它负责接收来自生产者的消息,并根据一定的规则将消息路由到一个或多个队列中。交换机根据生产者指定的Routing Key和自身的类型来决定将消息投递到哪些队列。

  5. 绑定(Binding):绑定是交换机与队列之间的关系,它定义了消息如何从交换机路由到队列。通过绑定,交换机能够知道应该将消息发送到哪些队列。在绑定时可以指定Routing Key,以便交换机根据这个Key来过滤和路由消息。

3、RabbitMQ中 vhost 的作用是什么? 

vhost 可以理解为虚拟 broker ,即 mini-RabbitMQ server。其内部均含有独立的 queue、exchange 和 binding 等,但最最重要的是,其拥有独立的权限系统,可以做到 vhost 范围的用户控制。当然,从 RabbitMQ 的全局角度,vhost 可以作为不同权限隔离的手段(一个典型的例子就是不同的应用可以跑在不同的 vhost 中)。

4、RabbitMQ有哪些重要的组件?

  • ConnectionFactory(连接管理器):应用程序与RabbitMQ之间建立连接的管理器,程序代码中使用。
  • Chanel(信道):消息推送使用的通道。
  • Exchange(交换器):用于接收、分配消息。
  • Queue(队列):用于存储生产者的消息。
  • RoutingKey(路由键):用于把生产者的数据分配到交换器上。
  • BindingKey(绑定键):用于把交换器的消息绑定到队列上。

5、RabbitMQ怎么保证消息的稳定性? 

提供了事务的功能,通过将channel设置为confirm(确认)模式

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

  • 声明队列必须设置持久化durable设置为true
  • 消息推送投递模式必须设置持久化,deliveryMode设置为2(持久)
  • 消息已经到达持久化交换器
  • 消息已经到达持久化队列

7、RabbitMQ持久化有什么缺点?

缺点是降低了服务器的吞吐量,因为使用的是磁盘而非内存存储,从而降低了吞吐量。

可尽量使用ssd硬盘来缓解吞吐量的问题。

8、RabbitMQ对集群节点停止顺序有要求吗?

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

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

当RabbitMQ集群中唯一一个磁盘节点崩溃时,会出现以下情况:

  1. 集群状态
    • 集群仍然可以保持运行状态,因为RabbitMQ集群的设计允许在部分节点故障时仍然能够提供服务。然而,由于磁盘节点负责存储集群的元数据、队列、交换器等信息,其崩溃会对集群的某些功能产生影响。
  2. 功能限制
    • 在磁盘节点崩溃后,你将无法在集群中创建新的队列、交换器或绑定。这是因为这些操作需要更新集群的元数据,而元数据通常保存在磁盘节点上。
    • 同样,添加用户、更改权限以及添加或删除集群节点的操作也将受到限制,因为这些操作也依赖于磁盘节点上存储的信息。
  3. 数据持久性
    • 如果崩溃的磁盘节点是负责存储特定队列消息的节点,那么这些队列中的消息可能会丢失,除非这些消息已经在其他内存节点上进行了镜像或备份。
    • RabbitMQ默认不会将整个队列的内容复制到整个集群中,因此,如果某个队列只存在于崩溃的磁盘节点上,那么该队列及其消息将无法恢复。
  4. 恢复与故障转移
    • 在磁盘节点崩溃后,应尽快采取措施恢复该节点或替换为新的磁盘节点,以确保集群的完整性和功能恢复。
    • 根据RabbitMQ的集群配置和策略,可以采取不同的故障转移和恢复策略,如使用镜像队列来减少数据丢失的风险。

综上所述,虽然RabbitMQ集群在磁盘节点崩溃后仍然可以运行,但会面临功能限制和数据丢失的风险。因此,及时恢复磁盘节点或采取适当的备份和恢复策略对于维护集群的稳定性和数据安全性至关重要。

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

不是,原因有以下两个:

  • 存储空间的考虑:如果每个节点都拥有所有队列的完全拷贝,这样新增节点不但没有新增存储空间,反而增加了更多的冗余数据;
  • 性能的考虑:如果每条消息都需要完整拷贝到每一个集群节点,那新增节点并没有提升处理消息的能力,最多是保持和单节点相同的性能甚至是更糟。

11、RabbitMQ节点的类型有哪些? 

  • 磁盘节点:消息会存储到磁盘
  • 内存节点:消息都存储在内存中,重启服务器消息会丢失,但性能要高于磁盘类型

12、RabbitMQ集群有什么用? 

RabbitMQ 集群有以下几个主要用途:

  1. 高可用性:通过在多个节点上运行 RabbitMQ,可以实现高可用性。如果一个节点出现故障,其他节点可以接管工作,确保消息的持续传递,从而减少系统的停机时间。
  2. 可扩展性:可以根据需要动态地向集群中添加或删除节点,以适应不断增长的消息流量。这使得系统能够处理更多的并发连接和消息数量。
  3. 负载均衡:RabbitMQ 集群可以在多个节点之间自动分配消息的负载,确保每个节点都能得到合理的利用,从而提高系统的整体性能。
  4. 数据冗余:可以将队列和消息复制到多个节点上,以实现数据的冗余存储。这增加了数据的可靠性,防止数据丢失。
  5. 故障转移:如果主节点发生故障,RabbitMQ 集群可以自动将队列和消费者转移到其他可用的节点上,确保服务的连续性。
  6. 提高性能:通过在多个节点上分布消息的处理,可以提高系统的吞吐量和响应时间。
  7. 分布式系统:RabbitMQ 集群支持在分布式系统中跨多个节点进行消息传递,使得不同的应用程序或服务可以在不同的节点上运行,并通过消息队列进行通信。
  8. 灵活的部署:可以根据实际需求在不同的服务器上部署 RabbitMQ 节点,形成一个集群,以适应不同的环境和架构。

总之,RabbitMQ 集群提供了一种可靠、可扩展和高性能的消息传递解决方案,适用于各种需要异步通信和分布式系统的场景。它有助于提高系统的可用性、性能和灵活性,确保消息的可靠传递和处理。

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/841076.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UTC与GPS时间转换-[week, sow]

UTC与GPS时间转换-[week, sow] utc2gpsgps2utc测试参考 Ref: Global Positioning System utc2gps matlab源码 function res utc2gps(utc_t, weekStart)%% parameterssec_day 86400;sec_week 604800;leapsec 18; % 默认周一为一周的开始if nargin < 2weekStart d…

算法打卡 Day10(栈与队列)-用栈实现队列 + 用队列实现栈

今天开始进入栈与队列啦&#xff01; 文章目录 栈与队列理论基础栈 Leetcode 232-用栈实现队列题目描述解题思路 Leetcode 225-用队列实现栈题目描述解题思路 首先我们来学习一下栈与队列的基础知识~ 栈与队列理论基础 栈与队列的区别是&#xff1a;栈是先进后出&#xff0c…

Python | Leetcode Python题解之第111题二叉树的最小深度

题目&#xff1a; 题解&#xff1a; class Solution:def minDepth(self, root: TreeNode) -> int:if not root:return 0que collections.deque([(root, 1)])while que:node, depth que.popleft()if not node.left and not node.right:return depthif node.left:que.appen…

1.4 视频标准组织 - ITU

1.4 视频标准组织 - ITU 关于 ITU 国际电信联盟&#xff08;International Telecommunication Union&#xff0c;简称 ITU&#xff09;是一个国际组织&#xff0c;主要负责确立国际无线电和电信的管理制度和标准。 关于 ITU-R 国际电信联盟无线电通信部门&#xff08;ITU R…

cnVcXsrv 21.1.13.1—VcXsrv 21.1.13中文版本简单说明~~

对于VcXsrv的使用目的和用途相信大家都很了解。前不久VcXsrv做了更新&#xff0c;并且将项目托管到github上了。链接如下&#xff1a; VcXsrv: Windows X-server based on the xorg git sourceshttps://github.com/marchaesen/vcxsrv也可以简单查看如下链接&#xff1a; VcXs…

9数据通信名词解释2

奈氏准则 在理想低通&#xff08;无噪声&#xff0c;带宽受限&#xff09;条件下&#xff0c;为了避免码间串扰&#xff0c;极限码元传输速率为2WBaud&#xff0c;W是信道带宽&#xff0c;单位是赫兹 结论&#xff1a; ①在任何信道中&#xff0c;码元的传输速率是有上限的&…

.Net Core WebAPI参数的传递方式

Controller继承自ControllerBase&#xff0c;只不过增加了视图相关的方法&#xff0c;一般mvc项目选用Controller而Web API项目选择ControllerBase即可。 给服务器传递参数的时候&#xff0c;有URL、QueryString、请求报文体3种方式 请求路径/Student/GetAll/school/MIT/class…

在matlab里面计算一组给定参数的方程的解

如&#xff1a; k (1:1024); f (x)(1-x-k.*x.^2); 在这段代码给出了一组函数&#xff0c;若需要计算f0&#xff0c;可以通过自带的函数实现&#xff1a; x0 zeros(length(k),1); options optimoptions(fsolve,Display,none,TolX,tol,TolFun,tol); tic for ik 1:length…

全网讲的最详细的Docker镜像分层存储原理

先说结论&#xff0c;容器镜像分层存储图示 欢迎关注 实验环境准备 当前实验docker版本24.0.7如下&#xff0c;当前docker版本使用overlay2机制存储镜像 Client: Docker Engine - CommunityVersion: 24.0.7API version: 1.43Go version: go1.20.10…

Three.js 研究:2、如何让动画线性运动

1、默认的动画含有加速度并非线性的 制作好的动画很明显是非线性的&#xff0c;这是一个运动环&#xff0c;为了让环运行线性进行如下设置。 2、设置动画成为线性动画

【vue3】嵌套的 effect 与 effect 栈

在 Vue 3 的响应式系统中&#xff0c;effect 是一个非常重要的概念。effect 是一个函数&#xff0c;它接受一个执行副作用&#xff08;side effect&#xff09;的函数作为参数&#xff0c;并返回一个可以停止这个副作用的函数。当响应式数据发生变化时&#xff0c;Vue 3 会自动…

Vue从入门到实战Day07

一、vuex概述 目标&#xff1a;明确vuex是什么&#xff0c;应用场景&#xff0c;优势 1. 是什么&#xff1a; vuex是一个vue的状态管理工具&#xff0c;状态就是数据。 大白话&#xff1a;vuex是一个插件&#xff0c;可以帮助我们管理vue通用的数据&#xff08;多组件共享的…

解锁数据关联之道:SQL 表连接详解

文章目录 概述表关系横向连接内连接 inner join左连接 left join右连接 right join全连接 full join交叉连接 cross join 纵向合并UNION ALLUNION 概述 在数据处理、数据分析中常会用到表连接。表连接的作用是将多个表中的数据关联起来&#xff0c;以便在查询过程中获取更全面…

嵌入式0基础开始学习 ⅠC语言(8)结构体

0.问题引入 C语言是允许程序员定义自己的组合类型 构造类型 》 数组 结构体 枚举 共用体/联合体 …

Vxetable 递归多级表头

在对vxetable 进行二次封装的时候&#xff0c;多级表头也是需要考虑进去的&#xff0c;所以需要封装一个递归列组件进行多级表头的一个渲染。 // my-table.vue <vxe-tableref"xTable":key"currentKey":data"pageData?.list || []"show-head…

Flutter 中的 MergeableMaterial 小部件:全面指南

Flutter 中的 MergeableMaterial 小部件&#xff1a;全面指南 Flutter 提供了丰富的 Material Design 组件&#xff0c;用于构建具有丰富交互和视觉效果的用户界面。MergeableMaterial 是 Flutter 中一个特殊的组件&#xff0c;它允许多个 Material widget&#xff08;如按钮、…

2024-5-25

今日安排&#xff1a; 前面的状态不太好&#xff0c;后面一定要好好调整 重新开始审计 nf_tables 源码&#xff0c;并在审计的过程中复现历史漏洞【 && iptables 相关学习】♥♥♥♥♥复现 CTF 相关题目♥♥♥♥学习 winpwn♥♥♥♥mount 的使用&#xff0c;学习 nam…

js 根据日期获取星期几

js 根据日期获取星期几 方法一&#xff1a;使用Date对象中的getDay()方法 function getWeekday(dateStr) {const weekDays [星期日, 星期一, 星期二, 星期三, 星期四, 星期五, 星期六];const date new Date(dateStr);const weekday date.getDay();return weekDays[weekday…

MySQL造数据占用临时表空间

在数据库性能测试和开发过程中&#xff0c;常常需要生成大量的测试数据以模拟真实环境。在MySQL中&#xff0c;造数据的过程可能会占用大量的临时表空间&#xff0c;这可能会影响数据库的性能和稳定性。本文将深入探讨MySQL造数据时临时表空间的使用情况&#xff0c;并通过多个…

GolangFoundation

GolangFoundation 一. Hello World1.1 SDK1.2 环境1.3 hello world1.4 语法规则二. 变量2.1 变量声明与定义一. Hello World 1.1 SDK https://golang.google.cn/dl/下载最新版1.2 环境 GoGOROOT D:\Dev\