面试题:MQ

一、常见的mq产品

RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMqRabbitMQ: One broker to queue them all | RabbitMQhttps://www.rabbitmq.com/

二、作用(面试题) 为什么用MQ?

1、异步处理

2、应用解耦

3、流量削峰

三、交换机类型(面试题)

1、Direct Exchange

直连型交换机,根据消息携带的路由键将消息投递给对应队列。

2、Fanout Exchange

扇型(广播)交换机,这个交换机没有路由键概念,就算你绑了路由键也是无视的。 这个交换机在接收到消息后,会直接转发到绑定到它上面的所有队列。

3、Topic Exchange

主题交换机,这个交换机其实跟直连交换机流程差不多,但是它的特点就是在它的路由键和绑定键之间是有规则的。

四、面试题: 你们是如何保证消息不丢失的?

使用死信队列来保证消息不丢失

五、面试题: ++Rabbitmq怎么保证消息的可靠性?++

1.消费端消息可靠性保证

1.消息确认(Acknowledgements)

消费者在接收到消息后,默认情况下RabbitMQ会自动确认消息(autoAck=true)。为保证消息可靠性,可以设置autoAck=false,使得消费者在处理完消息后手动发送确认(basicAck)。如果消费者在处理过程中发生异常或者未完成处理就终止运行,那么消息在超时时间内将不会被删除,会再次被RabbitMQ投递给其他消费者。

2.死信队列(Dead Letter Queue)

当消息不能被正常消费时(比如达到最大重试次数),可以通过设置TTL(Time To Live)或者死信交换器(Dead Letter Exchange)将消息路由至死信队列,从而有机会后续分析和处理这些无法正常消费的消息。

2.生产端消息可靠性保证:

  1. 消息持久化

当生产者发布消息时,可以选择将其标记为持久化(persistent).这意味着即使 RabbitMQ 服务器重启,消息也不会丢失,因为它们会被存储在磁盘上。

  1. 确认(Confirm)机制

开启confirm回调模式后,RabbitMQ会在消息成功写入到磁盘并至少被一个交换器接受后,向生产者发送一个确认(acknowledgement)。若消息丢失或无法投递给任何队列,RabbitMQ将会发送一个否定确认(nack). 生产者可以根据这些确认信号判断消息是否成功送达并采取相应的重试策略。

RabbitMQ作为消息中间件并启用publisher confirms(发布者确认)与publisher returns(发布者退回)机制时,可以确保消息从生产者到交换机的投递过程得到更准确的状态反馈。

相关推荐
我是一颗柠檬11 小时前
【Java项目技术亮点】分布式锁实现与优化:从Redisson到ZooKeeper,彻底搞懂分布式锁的底层原理
java·redis·分布式·中间件·java-zookeeper
Trouvaille ~1 天前
【Redis篇】Redis 哨兵(Sentinel):高可用自动故障转移
数据库·redis·缓存·中间件·sentinel·高可用·哨兵
zzz_23681 天前
【RabbitMQ】面试系列 · 第三期:从线上故障到架构选型
面试·架构·rabbitmq
小碗羊肉1 天前
【RabbitMQ高级】如何保证消息的可靠性?
java·rabbitmq·java-rabbitmq
constCpp2 天前
深入理解内存管理
后端·中间件·架构
zzz_23682 天前
【RabbitMQ】面试系列 · 第四期:性能调优与插件生态
面试·rabbitmq·ruby·java-rabbitmq
zzz_23682 天前
【RabbitMQ】面试系列 · 第一期:基础认知与选型实战
分布式·面试·rabbitmq
愚公搬代码2 天前
【愚公系列】《移动端AI应用开发》014-DeepSeek API开发与集成(处理多轮对话与动态请求)
人工智能·中间件·架构
Trouvaille ~2 天前
【Redis篇】Redis 主从复制:数据同步的原理与实现
数据库·redis·缓存·中间件·高可用·主从复制·后端开发
唔662 天前
(二)补充完整的数据库、中间件、MQTT、JAR后台和Web前端的部署脚本,全部一键自动化。
数据库·中间件·jar