Live2D

什么是消息队列?消息队列有哪些应用场景?

 


什么是消息队列

消息队列是一种用于异步通信的机制,用于在不同的应用程序之间传递消息。消息队列通常由消息生产者、消息队列和消息消费者三部分组成。

消息生产者将消息发送到消息队列中,而消息消费者则从消息队列中接收消息。消息队列负责存储和管理消息,确保消息传递的可靠性和稳定性。在实现过程中,消息队列还会提供一些额外的功能,如消息过滤、消息路由、消息持久化等

消息队列的特点

  1. 异步通信:消息生产者和消息消费者之间采用异步通信模式,发送方无需等待接收方的响应即可继续执行。

  2. 解耦合:消息队列可以将消息生产者和消息消费者解耦合,使得它们之间的关系更加灵活。

  3. 可靠性:消息队列通常会提供一些保证消息传递可靠性的机制,如消息持久化、重试机制等。

  4. 缓冲:消息队列可以缓冲来自多个消息生产者的消息,使得消息消费者可以按照自己的节奏进行消费,从而有效地平衡生产者和消费者之间的处理速度。

消息队列的应用

  1. 应用解耦:将不同的业务逻辑拆分成不同的服务,通过消息队列实现服务之间的通信,提高系统的可维护性和可扩展性。

    例子:

    用户下单后,订单系统需要通知库存系统。传统方法是:订单系统调用库存系统的接口。

    假如库存系统没有办法完成访问,则整个操作无法完成。

    但是如果将消息写入消息队列,用户下单后,订单系统持续化处理,将返回用户订单下单成功,库存系统,将采用拉/推的方式,获取下单信息,库存系统根据下单的信息,进行库存操作。如此设计后,订单系统与库存系统将分离开来,订单系统写入消息队列,之后就不再关心其他后续操作,实现了解耦。

  2. 异步任务处理:通过将任务发送到消息队列中,异步处理任务,提高系统的并发性能和吞吐量。

    例子:

    可以将对实时性要求不高的场景进行异步处理,如用户注册后发送注册短信和注册邮件。

    传统串行方式,将注册信息写入数据库成功后,发送注册邮件,再发送注册短信。以上三个任务全部完成后,再返回给客户。

    并行方式,将注册信息写入数据库成功后,发送注册邮件和发送注册短信同时进行,三个任务完成后,返回给客户端。可以提高处理时间。

    假如三个业务节点每个使用50毫秒,不考虑网络等其他开销,则串行方式的时间为150毫秒,并行的时间可能是100毫秒。

  3. 流量削峰:将流量通过消息队列分散到不同的服务中,避免单个服务被高并发流量打垮。

    例子:

    如果一个订单系统,每秒钟可以处理一万次下单,在平时正常的时候该系统可以应付正常的请求,正常时段我们下单之后就会收到结果。但是如果突然遇到高峰期,有十万次下单操作给到订单系统中,这时由于超出处理范围则会造成系统崩溃。

    这个时候就可以用到消息队列来做缓冲,将其流量削峰,将一秒内十万次下单存到消息队列中,然后订单系统每秒只拉取一万下单来做处理,将其他订单先积压在消息队列中,等高峰期过去后,系统就会慢慢把订单都处理完。

    如果加入消息队列过长或者长度超过最大数量,则直接抛弃用户请求或者跳转到错误页面。

  4. 日志收集:通过将日志消息发送到消息队列中,将日志收集和分析与业务逻辑解耦合,提高系统的可靠性和可维护性。

    例子:将消息队列使用在日志处理中,比如Kafka的应用,解决大量日志传输的问题,日志采集客户端,负责日志数据采集,定时写入Kafka队列;Kafka消息队列,负责日志数据的接收、存储、转发;日志处理应用:订阅并消费kafka队列中的日志数据。

  5. 消息通讯,消息队列一般内置了高效的通信机制,可以实现高效的点对点的消息队列,或者聊天室等。点对点通讯:客户端A和客户端B使用同一队列,进行消息通讯。聊天室通讯:客户端A和客户端B...客户端N,订阅同一个主题,进行消息发布和接收,实现聊天室的效果

posted @   都是朕的江山  阅读(255)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤
返回顶端
点击右上角即可分享
微信分享提示