当前位置: 首页 > news >正文

面试-RabbitMQ常见面试问题

1.什么是RabbitMQ?

RabbitMQ是一款基于AMQP协议的消息中间件,消费方并不需要确保提供方的存在,实现服务之间的高度解耦。

基本组成有:

  • Queue:消息队列,存储消息,消息送达队列后转发给指定的消费方
  • Exchange:消息队列交换机,按一定规则将消息路由转发到某一个队列中,对消息进行过滤
  • 消费者
  • 生产者

2.如何确保消息正确发送到MQ?

将信道设置为confirm模式(发送方确认模式),则所有在信道上发布的消息都会被指派一个唯一的ID,当消息被投递到队列或者写入磁盘后,信道会发送确认给生产者。如果说MQ内部发生了错误导致消息丢失,会发送一条nack消息,发送方确认模式是异步的,生产方在等待确认的同时是可以继续发送消息,当确认消息到达后,就会触发生产方的回调方法,来处理确认消息。

3.如何确保消息接收方消费了消息?

接收方确认机制,消费者在声明队列的时候,指定参数noAck,当noAck参数设置为false 时,消费者接收每一条消息后都必须进行确认,RabbitMq会等待消费者显式发回ack信息号才从内存或者磁盘中移除队列。RabbitMQ不会为ack设置超时时间,是以消费者的连接是否断开来判断,如果在ack返回前断开连接,MQ就会重新将消息发送给下一个消费者。

4.如何处理消息堆积?

如果已经产生了大量的消息堆积,首先要排查问题产生的原因,是消费端的网络故障还是消费端过少处理不过来等原因。找到问题后快速解决掉消费端的故障使其恢复消费能力,如果是因为消费端过少,消费能力不足,先通过临时的紧急扩容,然后建立一个临时的topic,建立好比原先多N倍的queue,再写一个临时分发的消费者,去消费积压的消息,消费后不做其他耗时的处理,直接轮询写入新建的queue中,再扩容N倍正常业务消费者去消费掉这些消息,等处理结束后再恢复原来的部署架构。

5.如何处理重复消息?

主要保证业务的幂等性,再修改数据时考虑乐观锁或悲观锁操作。如update t_account set amount = amount+1 where id =1,可以update 的条件上加入乐观锁,如:update t_account set amount = amount+1 where id =1 and amount = 10;
这样就能保证update 只会成功执行一次。

6.如何确保发送的消息不丢失?

生产者丢失:解决方案:开启confir模式,当收到MQ发送回来的ack后就说明发送成功,如果收到MQ返回的nack则重发消息,否则超过一段时间后也可以重发消息。
MQ丢失:开启持久化到磁盘,当接收到消息时,持久化到磁盘中
,发送方需要设置deliveryMode=2完全持久化到磁盘上。
消费者丢失:关闭MQ默认的ack机制,手动调用ack,确保业务完成后再进行ack。

http://www.lryc.cn/news/91951.html

相关文章:

  • 使用VBA在单元格中快速插入Unicode符号
  • PyTorch 深度学习 || 专题六:PyTorch 数据的准备
  • 迅为RK3568开发板2800页手册+220集视频
  • 模拟电子 | 稳压管及其应用
  • 使用大型语言模(LLM)构建系统(二):内容审核、预防Prompt注入
  • springboot---mybatis操作事务配置的处理
  • 游戏盾是什么防御DDOS攻击的
  • java快速结束嵌套循环
  • chatgpt赋能python:Python屏蔽一段代码
  • 项目跑不起来
  • 黑马Redis视频教程高级篇(多级缓存案例导入说明)
  • 2023系统分析师下午案例分析真题
  • 【Python练习】Matplotlib数据可视化
  • 【2611. 老鼠和奶酪】
  • Reid strong baseline 代码详解
  • 宝塔面板搭建网站教程:Linux下使用宝塔一键搭建网站,内网穿透发布公网上线
  • 常微分方程(ODE)求解方法总结
  • 【华为OD机试】区间交集【2023 B卷|200分】
  • Vue3 | Element Plus resetFields不生效
  • 机器视觉特点 机器视觉实际应用
  • elementui大型表单校验
  • Linux+Selenium
  • 2023-06-01 LeetCode每日一题(礼盒的最大甜蜜度)
  • Spring架构篇--2.7.2 远程通信基础--Netty原理--ServerBootstrap
  • awk编辑器
  • DicomObjects.Core 3.0.17 Crack
  • 电脑怎么通过网络传输文件?
  • 人工智能之深度学习
  • 性能测试设计阶段
  • leetCode !! word break