返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >消息队列应用场景介绍
  • 754
分享到

消息队列应用场景介绍

2024-04-02 19:04:59 754人浏览 泡泡鱼
摘要

一、什么是队列 队列(Queue)是一种常见的数据结构,其最大的特点就是先进先出(First In First Out),作为最基础的数据结构,队列应用很广泛。比如火车站排队买票等等

一、什么是队列

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

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

二、什么是消息队列

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

目前比较常用的消息队列有ActiveMQRabbitMQkafkaRocketMQRedis等。

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

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

三、消息队列应用场景

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

1、分布式场景

1.1、异步处理

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

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

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

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

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

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

1.2、应用解耦

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

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

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

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

1.3、流量削峰

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

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

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

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

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

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

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

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

2、日志场景

优化日志传输

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

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

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

3、及时通讯场景

聊天室

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

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

到此这篇关于消息队列应用场景的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: 消息队列应用场景介绍

本文链接: https://lsjlt.com/news/144015.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 消息队列应用场景介绍
    一、什么是队列 队列(Queue)是一种常见的数据结构,其最大的特点就是先进先出(First In First Out),作为最基础的数据结构,队列应用很广泛。比如火车站排队买票等等...
    99+
    2024-04-02
  • 消息队列应用场景解析
    分布式消息服务DMS是完全托管的高性能消息队列服务,提供普通队列、有序队列、Kafka、ActiveMQ、RabbitMQ,兼容HTTP、TCP、AMQP协议,为分布式应用提供灵活可靠的异步通信机制。使用D...
    99+
    2024-04-02
  • java消息队列应用场景是什么
    这篇文章主要讲解了“java消息队列应用场景是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java消息队列应用场景是什么”吧!一、什么是队列队列(Queue)是一种常见的数据结构,其最...
    99+
    2023-06-29
  • RabbitMQ消息队列的应用场景有哪些
    RabbitMQ是一个高性能的开源消息中间件,它可以在分布式系统中传递和存储大量的消息。它的应用场景非常广泛,包括但不限于以下几个方...
    99+
    2023-09-20
    rabbitmq
  • java消息队列mq的使用场景是什么
    Java消息队列(MQ)的使用场景主要包括以下几个方面:1. 异步通信:当系统中的不同模块之间需要进行异步通信时,可以使用消息队列来...
    99+
    2023-10-09
    java
  • 队列的消息持久化和消息验证在PHP与MySQL中的应用场景
    引言队列是一个常用的应用程序组件,它可以用于在不同的系统之间传递消息。在复杂的系统架构中,消息队列可以起到解耦系统组件、提高系统可靠性和性能的作用。本文将介绍队列的消息持久化和消息验证在PHP与MySQL中的应用场景,并提供具体的代码示例。...
    99+
    2023-10-21
    队列 消息持久化 消息验证
  • 队列的消息去重和消息幂等性在PHP与MySQL中的应用场景
    引言:随着互联网技术的不断发展,队列成为了各种分布式系统中重要的基础组件之一。而在队列的应用过程中,消息的去重和消息的幂等性是两个常见的问题,尤其在高并发场景下更为突出。本文将详细介绍队列的消息去重和消息幂等性在PHP与MySQL中的应用场...
    99+
    2023-10-21
    MySQL PHP 关键词:队列 消息去重 消息幂等性
  • 队列的消息持久化和消息去重在PHP与MySQL中的应用场景
    队列是一种常见的数据结构,在软件开发中被广泛应用于异步消息处理、任务调度、日志收集等场景。其中,消息持久化和消息去重是队列的两个重要特性,能够保证消息的可靠性和数据的一致性。在PHP和MySQL中,队列的应用可以通过Redis作为消息中间件...
    99+
    2023-10-21
    队列 (Queue) 消息持久化 (Message persistence) 消息去重 (Message dedupli
  • 队列的消息排序和消息优先级在PHP与MySQL中的应用场景
    队列(Queue)是计算机科学中常用的一种数据结构,它按照先进先出(First-In-First-Out,FIFO)的原则进行操作。队列广泛应用于消息传递、任务调度、事件驱动等场景中。而在实际应用中,有时我们需要对队列中的消息进行排序或者给...
    99+
    2023-10-21
    队列 消息排序 消息优先级
  • 面试官:说出八种消息队列的应用场景。啊?八种?
    本文来源于公众号:胖滚猪学编程。转载请注明出处! 一个风度翩翩,穿着格子衬衣的中年男子,拿着一个满是划痕的mac向她走来,看着铮亮的头,胖滚猪心想,这肯定是尼玛顶级架构师吧!完了要挂了。 结果面试官第一个问题,就让胖滚猪内心...
    99+
    2016-03-21
    面试官:说出八种消息队列的应用场景。啊?八种?
  • 队列在PHP与MySQL中的消息分发机制及应用场景
    摘要:队列是一种常见的消息传递机制,在PHP与MySQL中的应用场景非常广泛。本文将介绍队列在PHP与MySQL中的消息分发机制和应用场景,并提供具体的代码示例。一、引言队列是一个典型的先进先出(FIFO)的数据结构,在软件开发中被广泛应用...
    99+
    2023-10-21
    应用场景 队列 消息分发
  • 大数据Kafka:消息队列和Kafka基本介绍
    目录一、什么是消息队列二、消息队列的应用场景异步处理 应用耦合限流削峰消息驱动系统 三、消息队列的两种方式点对点模式发布/订阅模式四、常见的消息队列的产品1) RabbitMQ2) ...
    99+
    2024-04-02
  • ThreadLocal原理介绍及应用场景
    本次给大家介绍重要的工具ThreadLocal。讲解内容如下,同时介绍什么场景下发生内存泄漏,如何复现内存泄漏,如何正确使用它来避免内存泄漏。 ThreadLocal是什么...
    99+
    2024-04-02
  • Clouda框架介绍与应用场景
    Clouda是一个基于浏览器运行的前端应用开发框架。它提供了一套完整的开发工具和资源,可以帮助开发者快速构建跨平台的Web应用。Cl...
    99+
    2023-08-23
    Clouda
  • SpringBoot2如何整合Redis哨兵集群 实现消息队列场景
    这篇文章主要介绍了SpringBoot2如何整合Redis哨兵集群 实现消息队列场景,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、Redis集群简介1、RedisClus...
    99+
    2023-06-02
  • Golangerror使用场景介绍
    目录前言error调用栈前言 在Go的编程中, error的使用场景数不胜数, 主要就是用来处理各种异常情况. 长久以来, 我的使用方式都是这样的: err := errors.Ne...
    99+
    2023-03-15
    GoLang error Go error使用场景
  • Javaredis使用场景介绍
    目录1.作为缓存1.1 为何使用1.2 什么样的数据适合放入缓存1.3 使用redis作为缓存1.3.1 未使用配置类1.3.2 使用配置类2.分布式锁2.1 压测工具的使用2.2 ...
    99+
    2024-04-02
  • Redis数据库的应用场景介绍
    一、MySql+Memcached架构的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的不断增加,...
    99+
    2022-06-04
    场景 数据库 Redis
  • Node.js的特点和应用场景介绍
    Node.js应该是当今最火热的技术之一。本文主要介绍Node.js的特点及应用场景。 Node.js是一个基于Chrome JavaScript运行时建立的一个平台,用来方便地搭建快速的 易于扩展的网络应...
    99+
    2022-06-04
    场景 Node js
  • 高级消息队列协议AMQP简介
    历史: Message Queue的需求由来已久,80年代最早在金融交易中,高盛等公司采用Teknekron公司的产品,当时的Message queuing软件叫做:the info...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作