什么是消息队列?消息队列有哪些应用场景?
什么是消息队列
消息队列是一种用于异步通信的机制,用于在不同的应用程序之间传递消息。消息队列通常由消息生产者、消息队列和消息消费者三部分组成。
消息生产者将消息发送到消息队列中,而消息消费者则从消息队列中接收消息。消息队列负责存储和管理消息,确保消息传递的可靠性和稳定性
消息队列的特点
-
异步通信:消息生产者和消息消费者之间采用异步通信模式,发送方无需等待接收方的响应即可继续执行。
-
解耦合:消息队列可以将消息生产者和消息消费者解耦合,使得它们之间的关系更加灵活。
-
可靠性:消息队列通常会提供一些保证消息传递可靠性的机制,如消息持久化、重试机制等。
-
缓冲:消息队列可以缓冲来自多个消息生产者的消息,使得消息消费者可以按照自己的节奏进行消费,从而有效地平衡生产者和消费者之间的处理速度。
消息队列的应用
-
应用解耦:将不同的业务逻辑拆分成不同的服务,通过消息队列实现服务之间的通信,提高系统的可维护性和可扩展性。
例子:
用户下单后,订单系统需要通知库存系统。传统方法是:订单系统调用库存系统的接口。
假如库存系统没有办法完成访问,则整个操作无法完成。
但是如果将消息写入消息队列,用户下单后,订单系统持续化处理,将返回用户订单下单成功,库存系统,将采用拉/推的方式,获取下单信息,库存系统根据下单的信息,进行库存操作。如此设计后,订单系统与库存系统将分离开来,订单系统写入消息队列,之后就不再关心其他后续操作,实现了解耦。
-
异步任务处理:通过将任务发送到消息队列中,异步处理任务,提高系统的并发性能和吞吐量。
例子:
可以将对实时性要求不高的场景进行异步处理,如用户注册后发送注册短信和注册邮件。
传统串行方式,将注册信息写入数据库成功后,发送注册邮件,再发送注册短信。以上三个任务全部完成后,再返回给客户。
并行方式,将注册信息写入数据库成功后,发送注册邮件和发送注册短信同时进行,三个任务完成后,返回给客户端。可以提高处理时间。
假如三个业务节点每个使用50毫秒,不考虑网络等其他开销,则串行方式的时间为150毫秒,并行的时间可能是100毫秒。
-
流量削峰:将流量通过消息队列分散到不同的服务中,避免单个服务被高并发流量打垮。
例子:
如果一个订单系统,每秒钟可以处理一万次下单,在平时正常的时候该系统可以应付正常的请求,正常时段我们下单之后就会收到结果。但是如果突然遇到高峰期,有十万次下单操作给到订单系统中,这时由于超出处理范围则会造成系统崩溃。
这个时候就可以用到消息队列来做缓冲,将其流量削峰,将一秒内十万次下单存到消息队列中,然后订单系统每秒只拉取一万下单来做处理,将其他订单先积压在消息队列中,等高峰期过去后,系统就会慢慢把订单都处理完。
如果加入消息队列过长或者长度超过最大数量,则直接抛弃用户请求或者跳转到错误页面。
-
日志收集:通过将日志消息发送到消息队列中,将日志收集和分析与业务逻辑解耦合,提高系统的可靠性和可维护性。
例子:将消息队列使用在日志处理中,比如Kafka的应用,解决大量日志传输的问题,日志采集客户端,负责日志数据采集,定时写入Kafka队列;Kafka消息队列,负责日志数据的接收、存储、转发;日志处理应用:订阅并消费kafka队列中的日志数据。
-
消息通讯,消息队列一般内置了高效的通信机制,可以实现高效的点对点的消息队列,或者聊天室等。点对点通讯:客户端A和客户端B使用同一队列,进行消息通讯。聊天室通讯:客户端A和客户端B...客户端N,订阅同一个主题,进行消息发布和接收,实现聊天室的效果
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤