0

0

java消息队列应用场景是什么

PHPz

PHPz

发布时间:2023-05-10 23:46:04

|

2157人浏览过

|

来源于亿速云

转载

一、什么是队列

队列(queue)是一种常见的数据结构,其最大的特点就是先进先出(first in first out),作为最基础的数据结构,队列应用很广泛。比如火车站排队买票等等。可以用下图表示队列:

java消息队列应用场景是什么

其中a1、a2、an表示队列中的数据。数据从队尾入队列,然后从队头出队列。

二、什么是消息队列

消息队列(Message Queue)是一种使用队列(Queue)作为底层存储数据结构,可以用于解决不同进程与应用程序之间通讯的分布式消息容器,也可以称为消息中间件。

目前比较常用的消息队列有ActiveMQ、RabbitMQ、Kafka、RocketMQ、Redis等。

立即学习Java免费学习笔记(深入)”;

java消息队列应用场景是什么

消息队列和队列有什么区别呢?

唯一的区别在于入队列的时候称为生产者,出队列的时候称为消费者。

三、消息队列应用场景

消息队列应用场景非常广泛,下面我们列举比较常见的几个场景

1、分布式场景

1.1、异步处理

一般我们写的程序都是按照顺序执行的(即同步的方式)。比如电商系统中订单的例子,其执行顺序如下:

用户提交订单。订单完成以后增加积分。发生积分变动的短信通知。

可以用下面的流程图表示:

java消息队列应用场景是什么

如果按照上面的顺序执行,假如每个服务都需要花费一秒,那么客户端就要花费3秒的时间。对于用户来说,3秒的时间显然是不能忍受的,那么我们该如何解决呢?我们可以使用异步的方式来解决这个问题,看下面一张流程图:

java消息队列应用场景是什么

按照这种方式,积分服务和短信服务使用线程异步的方式进行操作,那么客户端只需要花费1秒的时间就可以完成了。但是,这种异步的方式会带来另外的问题:并发量降低。因为积分服务和短信服务都需要在订单服务里面开启线程,开启的线程多了,会导致客户端访问订单服务的并发量降低,可能导致客户端提交订单的实际时间会超过1秒钟。那么如何解决异步带来的问题呢?那就是使用消息队列,看下面的流程图:

java消息队列应用场景是什么

在上面的流程中,我们增加了一个消息队列的角色,首先由客户端提交订单,然后把订单写入到消息队列,积分服务和短信服务同时去消费消息队列里面的消息,这种方式不需要订单服务在额外的开启异步线程,客户端可以实现真正的耗时1秒。

1.2、应用解耦

我们还是以电商系统为例进行讲解,先看下面的流程图:

java消息队列应用场景是什么

上图的业务逻辑:客户端发起一个创建订单的请求,创建订单的时候,我们要先获取库存,然后在去扣减库存,这样订单系统和库存系统就形成了非常紧密的依赖关系。假如这时候库存系统发生了宕机,由于订单系统依赖于库存系统,这时候订单系统将不能使用。那么如何解决呢?

看下面使用消息队列的流程图:

Yodayo
Yodayo

一个专为动漫迷和vTuber打造的AI艺术创作平台、交流社区

下载

java消息队列应用场景是什么

在上面的流程中,我们加入了消息队列。首先客户端发起创建订单的请求,订单的消息写入到消息队列里面,然后库存系统去消息队列里面订阅消息,最后异步的去更新库存系统。如果库存系统发生了宕机,由于订单系统不直接依赖于库存系统,所以订单系统可以正常的响应客户端的请求。这样就实现了应用解耦。

1.3、流量削峰

对于高并发的系统来说,在访问高峰时,突发的流量就像洪水般涌向应用系统,尤其是一些高并发写操作,随时会导致数据库服务器瘫痪,无法继续提供服务。

而引入消息队列则可以减少突发流量对应用系统的冲击。消费队列就像“水库”一样,拦截上游的洪水,削减进入下游河道的洪峰流量,从而达到减免洪水灾害的目的。

在这方面最常见的例子就是秒杀系统,一般秒杀活动瞬间流量很高,如果流量全部涌向秒杀系统,会压垮秒杀系统,通过引入消息队列,可以有效缓冲突发流量,达到“削峰”的作用。

我们使用秒杀的场景来描述流量削峰,先看下面一张流程图:

java消息队列应用场景是什么

在上面的流程中,我们把秒杀服务称为上游服务,订单服务、库存服务、余额服务统称为下游服务。客户端发起秒杀的请求,秒杀服务收到客户端发送的请求以后,创建订单,修改库存,扣减余额,这是秒杀的基本业务场景。

假如下游服务只能同时处理1000个并发请求,上游服务可以处理10000个并发请求,而客户端发起了10000个请求,超出了下游服务可以处理的并发量,所以会导致下游服务发生宕机。这时就可以加入消息队列来解决宕机的问题。看下面加入消息队列的流程图:

java消息队列应用场景是什么

我们在上面的流程图中加入了消息队列,描述服务接收到客户端发送的10000个请求以后,把所有的请求都写入到消息队列中,然后下游服务去订阅消息队列里面的秒杀请求,然后在去执行自己的业务逻辑操作。

我们举个简单的例子,上游服务还是能处理10000个并发请求,下游服务还是只能处理1000个并发请求,那么这时候我们在消息队列里面会允许存1000个并发请求。上游的秒杀服务接收到10000个并发请求,而消息队列里面只能存1000个请求,多余的请求就不会存入到消息队列里面,直接返回给客户端提示“系统繁忙,请稍后!”。这就是所谓的流量削峰场景。这是由下游服务可以处理的并发量决定的。由于下游服务只能处理1000个并发请求,所以消息队列里面只能存1000个秒杀,多余的秒杀请求全部返回客户端提示。这样就保证了下游服务的正常响应,不会导致下游服务发生宕机,提高了系统的可用性。

2、日志场景

优化日志传输

为了程序的健壮性,我们一般会在程序中添加各种记录日志的功能,比如错误日志、操作日志等等,看下面一张流程图:

java消息队列应用场景是什么

上面的流程图是同步记录日志的流程。使用同步记录日志的流程,会使得整个流程花费的时间增多,而且也会容易造成业务系统宕机(如果数据库损坏了,向数据库记录日志的操作将会产生错误)。我们可以使用消息队列的方式优化日志的传输。看下面的流程图:

java消息队列应用场景是什么

加入了消息队列以后,可以缩短系统花费的时间,而且也可以达到应用系统解耦的功能。

3、及时通讯场景

聊天室

消息队列最主要功能是收发消息,其内部有高效的通讯机制,因此非常适合用于消息通讯。

我们可以基于消息队列开发点对点的聊天系统,也可以开发广播系统,用于将消息广播给大量接收者。

java消息队列应用场景是什么

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
rabbitmq和kafka有什么区别
rabbitmq和kafka有什么区别

rabbitmq和kafka的区别:1、语言与平台;2、消息传递模型;3、可靠性;4、性能与吞吐量;5、集群与负载均衡;6、消费模型;7、用途与场景;8、社区与生态系统;9、监控与管理;10、其他特性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

207

2024.02.23

Java 消息队列与异步架构实战
Java 消息队列与异步架构实战

本专题系统讲解 Java 在消息队列与异步系统架构中的核心应用,涵盖消息队列基本原理、Kafka 与 RabbitMQ 的使用场景对比、生产者与消费者模型、消息可靠性与顺序性保障、重复消费与幂等处理,以及在高并发系统中的异步解耦设计。通过实战案例,帮助学习者掌握 使用 Java 构建高吞吐、高可靠异步消息系统的完整思路。

48

2026.01.28

什么是分布式
什么是分布式

分布式是一种计算和数据处理的方式,将计算任务或数据分散到多个计算机或节点中进行处理。本专题为大家提供分布式相关的文章、下载、课程内容,供大家免费下载体验。

407

2023.08.11

分布式和微服务的区别
分布式和微服务的区别

分布式和微服务的区别在定义和概念、设计思想、粒度和复杂性、服务边界和自治性、技术栈和部署方式等。本专题为大家提供分布式和微服务相关的文章、下载、课程内容,供大家免费下载体验。

251

2023.10.07

什么是中间件
什么是中间件

中间件是一种软件组件,充当不兼容组件之间的桥梁,提供额外服务,例如集成异构系统、提供常用服务、提高应用程序性能,以及简化应用程序开发。想了解更多中间件的相关内容,可以阅读本专题下面的文章。

183

2024.05.11

Golang 中间件开发与微服务架构
Golang 中间件开发与微服务架构

本专题系统讲解 Golang 在微服务架构中的中间件开发,包括日志处理、限流与熔断、认证与授权、服务监控、API 网关设计等常见中间件功能的实现。通过实战项目,帮助开发者理解如何使用 Go 编写高效、可扩展的中间件组件,并在微服务环境中进行灵活部署与管理。

226

2025.12.18

kafka消费者组有什么作用
kafka消费者组有什么作用

kafka消费者组的作用:1、负载均衡;2、容错性;3、广播模式;4、灵活性;5、自动故障转移和领导者选举;6、动态扩展性;7、顺序保证;8、数据压缩;9、事务性支持。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

175

2024.01.12

kafka消费组的作用是什么
kafka消费组的作用是什么

kafka消费组的作用:1、负载均衡;2、容错性;3、灵活性;4、高可用性;5、扩展性;6、顺序保证;7、数据压缩;8、事务性支持。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

159

2024.02.23

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 4.3万人学习

C# 教程
C# 教程

共94课时 | 11.2万人学习

Java 教程
Java 教程

共578课时 | 81.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号