每日八股:消息队列

什么是消息队列?

可以把消息队列理解为一个使用队列来通信的组件。它的本质就是个转发器,包含发消息、存消息、消费消息的过程。我们通常说的消息队列,简称MQ(Message Queue),它其实就是消息中间件,比较流行的有RabbitMQ,RocketMQ,Kafka。

如何保证幂等性?

幂等性是指同一操作的多次执行对系统状态的影响与一次执行结果一致。 实现幂等性的核心方案:

1.唯一标识(幂等键):客户端为每个请求生成全局唯一ID(如UUID、业务主键),服务端校验该ID是否已处理,适用场景接口调用、消息消费等。

2.数据库事务+乐观锁:通过版本号或状态字段控制并发更新,确保多次更新等同于单次操作,适用场景数据库记录更新。

3.数据库唯一约束:利用数据库唯一索引防止重复数据写入,适用场景数据插入场景。

4.分布式锁:通过锁机制保证同一时刻仅有一个请求执行关键操作,适用场景高并发下的资源抢夺(如秒杀)。

5.消息去重:消息队列生产者为每条消息生成唯一的消息ID,消费者在处理消息前,先检查该消息ID是否已经处理过,如果已经处理过则丢弃该消息。

RabbitMQ的特性

RabbitMQ以可靠性、灵活性和易扩展性为核心优势,适合需要稳定消息传递的复杂系统。核心特性如下:

1.持久化机制:RabbitMQ支持消息、队列和交换机的持久化。当启用持久化时,消息会被写入磁盘,即使RabbitMQ服务器重启,消息也不会丢失。

2.消息确认机制:提供了生产者确认和消费者确认机制。生产者可以设置confirm模式,当消息成功到达RabbitMQ服务器,会收到消息;消费者在处理完消息后,会向RabbitMQ服务器发送确认信号,告知服务器该消息已被成功处理,服务器就会将消息从队列中删除。

3.镜像队列:支持创建镜像队列,将队列的内容复制到多个节点上,提高消息的可用性和可靠性,当一个节点出现故障时,其他节点仍然可以提供服务,确保消息不会丢失。

4.多种交换器类型:RabbitMQ提供了多种类型的交换器。不同类型的交换器根据不同的规则将消息路由到队列中。

RabbitMQ的底层架构是什么?

1.核心组件:生产者负责发送消息到RabbitMQ,消费者负责从RabbitMQ接收并处理消息,RabbitMQ本身负责存储和转发消息。

2.交换机:交换机接收来自生产者的消息,并根据routing key和绑定规则将消息路由到一个或多个队列。

3.持久化:RabbitMQ支持消息的持久化,可以将消息保存在磁盘上,以确保在RabbitMQ重启后消息不丢失,队列也可以设置为持久化,以保证其结构在重启后不会丢失。

4.确认机制:为了确保消息可靠送达,RabbitMQ使用确认机制,消费者在处理完消息后发送确认给RabbitMQ,未确认的消息会重新入队。

5.高可用性:RabbitMQ提供了集群模式,可以将多个RabbitMQ实例组成一个集群,以提高可用性和负载均衡。通过镜像队列,可以在多个节点上复制同一队列的内容,以防止单点故障。

#八股##消息队列##Java选手#
全部评论

相关推荐

05-17 09:59
门头沟学院 Java
点赞 评论 收藏
分享
05-10 16:15
已编辑
广东第二师范学院 Java
医疗类的公司,主要业务也是和医疗有关的。不过我项目一个是代驾,一个是IM,没啥相关的,全程聊天,没啥八股更没手撕,只能整理出一些问题。1.自我介绍————xxx学校,java学习路线,学习接触了什么项目,算法刷多少,八股背多少,我上来就说我java路线走完了,八股背很多。2.介绍一下项目———b站学的,跟着做的,做过大街类项目外卖点评,音视频和简历上的代驾和IM等3.项目是怎么开发的,怎么学的———跟着视频学的4.前端是自己开发的吗———不是,项目给的模板。我说我前端就学几个月,更习惯用trae,面试官笑了5.IM是怎么实现的———netty或者spring都有websocket,用websocket实现。没多问了6.项目中支付是怎么做的———我说支付一般是微信,微信支付个人开不了,一般是模拟支付。7.谈谈你对future的理解———异步获取任务结果,runnable任务callable的get8.如果支付链路很长怎么办———completefuture处理支付前的业务逻辑,然后支付用mq异步9.redis和mongodb在项目中怎么用的———redis保存临时的经纬度,mongodb持久化用10.哪些地方用的回调———忘记怎么答了11.项目怎么部署的,本机还是虚拟机———虚拟机,Linux,用docker搜一下很快12.有做过多节点部署吗?———nginx吗,有了解,但我没真做过13.jvm了解吗———我说我八股贼熟,随便问,然后面试官让说下gc,我说那就说下cms和g1,然后就是关于这2个垃圾回收器的特点14.你对我们公司了解吗———了解(看过ssob主页)15.学校在哪里,实习怎么办———我说租房...下面开始我的反问1.实习生主要干什么———完成我们分配拆解的项目需求...2.部门业务是什么,有多少开发员工———医疗....,大概有30多个开发3.实习福利待遇———面试官自己不清楚4.公司加班调休策略———加班算调休,可以替换第二天的时间整个面试不到半小时,感觉可能项目不匹配没啥好问题   
查看34道真题和解析 面试问题记录
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
05-18 20:53
已编辑
匿名 匿名 4500 本科其他
点赞 评论 收藏
分享
评论
1
6
分享

创作者周榜

更多
牛客网
牛客企业服务