消息队列Message Queue

news2025/3/31 20:01:15

前面,我们在黑点点评中秒杀场景中,首次了解到消息队列MQ,它主要解决了秒杀场景中异步场景,提升了并发性,吞吐量。可是还是对消息队列又很多的疑惑?

消息队列是什么

消息队列是一种通信协议或中间件,允许生产者将消息放入中间队列中,然后由其他消费者从队列中异步获取并处理。

我们可以从定义中看出消息对立中角色分为两种,生产者和消费者,生产者就是消息的生产放,将消息构建好后,放入消息队列中,消费者就是收到消息后对消息进行相应的业务处理,并返回结果和确认信号。

例如,双11期间淘宝面临数百万的秒杀场景

当用户们完成了秒杀业务,系统都会产生相应的请求,请求其他模块处理业务,扣款模块进行扣款,订单服务产生相应的订单,积分模块返回相应的积分,而在传统的涉及场景中,所有的请求都会直接进入后端的数据库和库存系统,甚至大部分的业务还会串行处理,若每一个业务的响应时间都是200s,则这几个业务的响应时间加起来就有1s。所以这样的设计不符合高并发,高性能,高可用的场景要求

而当我们引入了消息队列,首先会将所有的用户请求放入消息队列中,然后并行的分发给相对应的模块处理,异步处理请求,这就降低了响应时间,符合高性能的特点,同时这个过程叫做异步,即各个模块在队列中拿到消息后异步处理,降低了时间延迟

第二个特点是削峰,消息队列在中间起到了缓冲的作用,防止大量的请求冲垮了后端,消息队列接收到大量的消息后,会根据后面的模块处理情况慢慢消费。

第三个特点是解耦,每个模块之间相互独立,即使有一个模块崩溃了,也不会影响其他的模块,可以通过后续的分布式服务解决。

消息队列有哪些

目前主流的mq模型由四种:

  • RabbitMQ:基于AMQP协议,支持复杂路由机制和高可靠性消息传递。

  • Apache Kafka:分布式流平台,适用于大数据量、低延时场景,具有高吞吐量。

  • ActiveMQ / Artemis:Java领域常用的消息中间件,支持多种协议。

  • RocketMQ:由阿里巴巴开发的分布式消息中间件,适合大规模消息处理场景。

RocketMQ 的架构设计注重高可用性、可伸缩性和低延迟,主要包括以下几个核心组件:

  • Producer
    负责构建并发送消息到 Broker。Producer 支持同步、异步以及单向发送,灵活应对不同业务场景下的性能和可靠性需求。

  • Broker
    Broker 是消息存储和传递的核心组件,主要负责接收 Producer 发送的消息、将消息持久化到存储介质,以及根据消费请求将消息分发给 Consumer。Broker 支持多种存储策略,如内存与磁盘混合存储,并通过双写等机制保证消息不丢失。

  • Consumer
    消费者订阅指定的 Topic 来接收消息。RocketMQ 支持集群消费、广播消费以及顺序消费等多种消费模式,满足业务对消息顺序性和分发策略的不同要求。

  • NameServer
    NameServer 作为轻量级的路由注册中心,负责维护 Broker 的地址信息及路由信息。Producer 和 Consumer 在发送和接收消息时,会先从 NameServer 获取最新的 Broker 信息,从而实现动态路由和负载均衡。

  • 消息模型
    RocketMQ 支持多种消息传递模型:

    • 点对点模型:一个消息只被一个消费者消费(集群消费)。

    • 发布订阅模型:消息可以被多个消费者订阅和消费(广播消费)。

    • 顺序消息:在某些场景下,消息顺序性非常重要,RocketMQ 提供了严格和局部顺序消费的能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2323666.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何利用AI智能生成PPT提升工作效率

如何利用AI智能生成PPT提升工作效率?PPT制作曾经是每个人办公生活中的一大痛点。你有多久没有在制作PPT时感到焦头烂额,选模板、调整格式、插入图片,每一项都得花费大量的时间和精力,最后还未必能做出一份令人满意的效果。随着人工…

WIN11 企业版 部署Dify+Docker

Dify(Do it for you)是一款开源的大语言模型应用开发平台,旨在简化AI应用的创建、部署和管理过程,使开发者能够更快速、更轻松地构建和运营基于GPT等模型的AI应用。 Dify平台创建和运营一个AI chatbot应用,涉及到登录…

1.25-20GHz/500ns超快跳频!盛铂SWFA300国产捷变频频率综合器模块赋能雷达/5G/电子战高频精密控制 本振/频综模块

盛铂SWFA300捷变频频率综合器模块简述: 盛铂科技国产SWFA300捷变频频率综合器是一款在频率范围内任意两点频率的跳频时间在500nS以内的高速跳频源,其输出频率范围为1.25GHz至20GHz,频率的最小步进为10kHz。同时它拥有优秀的相位噪声特性&…

代理IP协议详解HTTP、HTTPS、SOCKS5分别适用于哪些场景

“代理IP协议在现代网络通信中扮演着至关重要的角色。它们通过提供中间层服务,帮助用户匿名访问网络、绕过地理限制、提高安全性和加速数据传输。HTTP、HTTPS和SOCKS5是三种最常见的代理IP协议,每种协议都有其特定的用途和适用场景。” HTTP代理及其适用…

AIGC工具平台-通用抠图换背景

本模块采用先进的大模型智能算法,精准识别并分割图像中的人物或物品主体,实现高效、精准、智能化的抠图处理。无论是人物肖像、产品展示,还是复杂场景,该工具均能准确提取主体,并自动适配至背景图像,实现自…

word快速创建虚拟文字

创建虚拟文字的作用:如培训新员工使用 Word,用虚拟文字演示如何设置段落格式。不需要你随便乱敲文字或者去复制一段文字过来。帮你节约了时间! 两个函数的使用必须在段落的开头!!! rand函数 在 Word 中…

win10下python脚本运行缺失ccache的问题处理

问题 python脚本运行时,会提醒参考 https://github.com/ccache/ccache/blob/master/doc/INSTALL.md 处理缺失ccache的问题。 下载编译 下载ccache主干版本, 例如 https://github.com/ccache/ccache/archive/refs/heads/master.zip 按照说明编译 mkd…

开发复合组件TLabel + TwwDBLookupCombo

老鸟跳过。。。。。。。。本文只是为小白准备的 -------------- TwwDBLookupCombo 组件是老牌控件包的 Inofpower 中的一个组件。Inofpower 很久也没有更新了,只是作了新版DELPHI的适配,组件的功能从D2007那些开始到现在,可以说几乎没有任何…

0328-内存图2

是否正确待定: Perso类 package com.qc.内存图2;public class Perso {public int age;public String name;public static int flag;public void m1() {}public static void m2() {}Overridepublic String toString() {return "Perso [age" age "…

【ESP32S3】esp32获取串口数据并通过http上传到前端

通过前面的学习(前面没发过,因为其实就是跑它的demo)了解到串口配置以及开启线程实现功能的工作流程,与此同时还有esp32作为STA节点,将数据通过http发送到服务器。 将这两者联合 其实是可以得到一个:esp32获…

《一本书讲透Elasticsearch:原理、进阶与工程实践》读书笔记

1:es的组成部分: Elasticsearch 引擎:核心组件,处理索引和搜索请求 Kibana:es的可视化的数据界面,用于分析和展示数据 Beats(可选)轻量级的日志采集器 2:基本概念 es开…

Android15查看函数调用关系

Android15 Camera3中打印函数调用栈 1.使用CallStack跟踪函数调用 修改涉及三个内容: Android.bp中添加对CallStack的引用。CallStack被打包在libutilscallstack.so。代码中包含CallStack的头文件。代码中调用CallStack接口,打印函数调用栈。 例子&am…

macOS 15 通过 MacPorts 安装 PHP 7 构建错误找不到符号在 dns.o 中解决方法

构建遇到的问题如下: "_res_9_dn_expand", referenced from:_php_parserr in dns.o_php_parserr in dns.o_php_parserr in dns.o_php_parserr in dns.o_php_parserr in dns.o_php_parserr in dns.o_zif_dns_get_mx in dns.o..."_res_9_dn_skipname&…

练习:猜数字小游戏

需求: 程序自动生成一个 1 - 100 之间的随机数字,使用程序实现猜出这个数字是多少? 代码: //猜数字小游戏 package demo01; import java.util.Random; import java.util.Scanner; public class HelloJava {public static void …

EMQX Dashboard

EMQX Dashboard EMQX理论基础 https://blog.csdn.net/liudachu/article/details/146495030 1 Dashboard简介 EMQX 提供了一个内置的管理控制台,即 EMQX Dashboard。方便用户通过 Web 页面就能轻松管理和监控 EMQX 集群,并配置和使用所需的各项功能。 访…

PC名词解释-笔记本的S0,S1,S2,S3,S4,S5状态

​🎓作者简介:程序员转项目管理领域优质创作者 💌个人邮箱:[2707492172qq.com] 🌐PMP资料导航:PM菜鸟(查阅PMP大纲考点) 💡座右铭:上善若水,水善利…

uniapp自定义目录tree(支持多选、单选、父子联动、全选、取消、目录树过滤、异步懒加载节点、v-model)vue版本

先看案例: 效果: 数据结构如下: const themeList ref([{id: 1,name: 内蒙古,children: [{id: 3,name: 街道1,children: [{id: 4,name: 小区1}]}]},{id: 2,name: 北京,children: [{id: 6,name: 街道2}]} ]) 参数配置: 属性名类…

ESP32S3 WIFI 实现TCP服务器和静态IP

一、 TCP服务器代码 代码由station_example_main的官方例程修改 /* WiFi station ExampleThis example code is in the Public Domain (or CC0 licensed, at your option.)Unless required by applicable law or agreed to in writing, thissoftware is distributed on an &q…

docker中安装 python

ubuntu 1、安装源码编译所需依赖 apt-get install -y gcc g make cmake libsqlite3-dev zlib1g-dev libssl-dev libffi-dev 2、下载python安装包 python-release安装包下载_开源镜像站-阿里云 3、解压安装 tar -zxvf Python-3.7.5.tgz cd Python-3.7.5 ./configure --prefix…

数据库----单表、多表

数据库 create database 数据库名称;---创建数据库create database 数据库名称 default charsetutf8mb4;---创建数据库,同时指定编码show databases;---查看当前数据库管理下存在多少数据库show databases like "db_%";---查询以db_开头的数据库select d…