MQ高频面试题

1.rabbitmq 的使用场景有哪些?

2.rabbitmq 有哪些重要的角色?

3..rabbitmq 有哪些重要的组件?

4..rabbitmq 中 vhost 的作用是什么?

5.rabbitmq 的消息是怎么发送的?

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

7.rabbitmq 怎么避免消息丢失?

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

9.rabbitmq 持久化有什么缺点?

10.rabbitmq 有几种广播类型?

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

12.rabbitmq 集群有什么用?

13.rabbitmq 节点的类型有哪些?

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

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

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

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

18.如何保证RabbitMQ消息的可靠传输?

1.rabbitmq 的使用场景有哪些?

(1)服务间异步通信

(2)顺序消费

(3)定时任务

(4)请求削峰

2.rabbitmq 有哪些重要的角色?

3..rabbitmq 有哪些重要的组件?

4..rabbitmq 中 vhost 的作用是什么?

5.rabbitmq 的消息是怎么发送的?

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

1.提供了事务的功能。

2.通过将 channel 设置为 confirm(确认)模式。

7.rabbitmq 怎么避免消息丢失?

1.消息持久化

2.ACK确认机制

3.设置集群镜像模式

4.消息补偿机制

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

声明队列必须设置持久化 durable 设置为 true.
消息推送投递模式必须设置持久化,deliveryMode 设置为 2(持久)。
消息已经到达持久化交换器。
消息已经到达持久化队列。
 
以上四个条件都满足才能保证消息持久化成功。

9.rabbitmq 持久化有什么缺点?

持久化的缺点就是降低了服务器的吞吐量,
因为使用的是磁盘而非内存存储,
从而降低了吞吐量。可尽量使用 ssd 硬盘来缓解吞吐量的问题。

10.rabbitmq 有几种广播类型?

三种广播模式:
 
1 fanout: 所有bind到此exchange的queue都可以接收消息
         (纯广播,绑定到RabbitMQ的接受者都能收到消息);
2 direct: 通过routingKey和exchange决定的那个唯一的queue可以接收消息;
3 topic:  所有符合routingKey(此时可以是一个表达式)的routingKey所bind的queue可以接收消息;

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

 
通过消息过期后进入死信交换器,
再由交换器转发到延迟消费队列,实现延迟功能;
 
使用 RabbitMQ-delayed-message-exchange 插件实现延迟功能。

12.rabbitmq 集群有什么用?

 
集群主要有以下两个用途:
 
高可用:某个服务器出现问题,整个 RabbitMQ 还可以继续使用;
高容量:集群可以承载更多的消息量。

13.rabbitmq 节点的类型有哪些?

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

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

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

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

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

18.如何保证RabbitMQ消息的可靠传输?

消息不可靠的情况可能是消息丢失,劫持等原因;

丢失又分为:生产者丢失消息、消息列表丢失消息、消费者丢失消息;

生产者丢失消息:从生产者弄丢数据这个角度来看,RabbitMQ提供transaction和confirm模式来确保生产者不丢消息;

transaction机制就是说:发送消息前,开启事务(channel.txSelect()),然后发送消息,如果发送过程中出现什么异常,事务就会回滚(channel.txRollback()),如果发送成功则提交事务(channel.txCommit())。然而,这种方式有个缺点:吞吐量下降;

confirm模式用的居多:一旦channel进入confirm模式,所有在该信道上发布的消息都将会被指派一个唯一的ID(从1开始),一旦消息被投递到所有匹配的队列之后;

rabbitMQ就会发送一个ACK给生产者(包含消息的唯一ID),这就使得生产者知道消息已经正确到达目的队列了;

如果rabbitMQ没能处理该消息,则会发送一个Nack消息给你,你可以进行重试操作。

消息队列丢数据:消息持久化。

处理消息队列丢数据的情况,一般是开启持久化磁盘的配置。

这个持久化配置可以和confirm机制配合使用,你可以在消息持久化磁盘后,再给生产者发送一个Ack信号。

这样,如果消息持久化磁盘之前,rabbitMQ阵亡了,那么生产者收不到Ack信号,生产者会自动重发。

那么如何持久化呢?

这里顺便说一下吧,其实也很容易,就下面两步

    将queue的持久化标识durable设置为true,则代表是一个持久的队列
    发送消息的时候将deliveryMode=2

这样设置以后,即使rabbitMQ挂了,重启后也能恢复数据

消费者丢失消息:消费者丢数据一般是因为采用了自动确认消息模式,改为手动确认消息即可!

消费者在收到消息之后,处理消息之前,会自动回复RabbitMQ已收到消息;

如果这时处理消息失败,就会丢失该消息;

解决方案:处理消息成功后,手动回复确认消息。
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值