每日八股:消息队列

什么是消息队列?

可以把消息队列理解为一个使用队列来通信的组件。它的本质就是个转发器,包含发消息、存消息、消费消息的过程。我们通常说的消息队列,简称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选手#
全部评论

相关推荐

找个工作 学历是要卡的 要求是高的 技能不足是真的 实习经验是0的 简历无处可写是事实的 钱不好赚是真的 想躺平又不敢躺 也不甘心躺 怕自己的灵感和才华被掩埋甚至从未被自己发现 又质疑自己是否真正有才华
码农索隆:你现在啊,你心里都明白咋回事,但是你没办法改变现状,一想到未来,你又没有信心狠下心来在当下努力。 得走出这种状态,不能一直困在那里面,哪不行就去提升哪,你一动不动那指定改变不了未来,动起来,积少成多才能越来越好
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-01 12:22
点赞 评论 收藏
分享
06-27 12:54
已编辑
门头沟学院 Java
累了,讲讲我的大学经历吧,目前在家待业。我是一个二本院校软件工程专业。最开始选专业是觉得计算机感兴趣,所以选择了他。本人学习计算机是从大二暑假结束开始的,也就是大三开始。当时每天学习,我个人认为Java以及是我生活的一部分了,就这样持续学习了一年半,来到了大四上学期末,大概是在12月中旬,我终于找的到了一家上海中厂的实习,但我发现实习生的工作很枯燥,公司分配的活也不多,大多时间也是自己在自学。就这样我秋招末才找到实习。时间来到了3月中旬,公司说我可以转正,但是转正工资只有7000,不过很稳定,不加班,双休,因为要回学校参加答辩了,同时当时也是心高气傲,认为可以找到更好的,所以放弃了转正机会,回学校准备论文。准备论文期间就也没有投递简历。然后时间来到了5月中旬,这时春招基本也结束了,然后我开始投递简历,期间只是约到了几家下场面试。工资也只有6-7k,到现在我不知道该怎么办了。已经没有当初学习的心劲了,好累呀,但是又不知道该干什么去。在家就是打游戏,boss简历投一投。每天日重一次。26秋招都说是针对26届的人,25怎么办。我好绝望。要不要参加考公、考研、央国企这些的。有没有大佬可以帮帮我。为什么感觉别人找工作都是顺其自然的事情,我感觉自己每一步都在艰难追赶。八股文背了又忘背了又忘,我每次都花很长时间去理解他,可是现在感觉八股、项目都忘完了。真的已经没有力气再去学习了。图片是我的简历,有没有大哥可以指正一下,或者说我应该走哪条路,有点不想在找工作了。
码客明:太累了就休息一下兄弟,人生不会完蛋的
如果实习可以转正,你会不...
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-01 11:27
点赞 评论 收藏
分享
评论
1
7
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务