消息队列简介

消息队列
在认识rabbitMQ之前,我们需要先认识下消息队列。
消息队列,一般简称为MQ(Message Queue)。先不管消息(Message)这个词,先看看队列(Queue)。
队列就是一种先进先出的数据结构。
所以消息队列可以简单理解为:把要传输的数据放在队列中。
科普:
把数据放到消息队列叫做生产者
从消息队列里边取数据叫做消费者
为什么要用MQ
MQ可通过消息的收发,使多个系统之间不局限于同步调用,通过异步调用更好地实现解耦,流量削峰等。下面是几个常见的应用场景,帮助我们对MQ有一个简单的认识。
异步处理
引入MQ后,通过异步处理将响应时间减少至原先的1/3
应用解耦
场景:双11是购物狂节,用户下单后,订单系统需要通知库存系统,传统的做法就是订单系统调用库存系统的接口
缺点:
当库存系统出现故障时,订单就会失败。(这样马云将少赚好多好多钱^ ^)
订单系统和库存系统高耦合.
引入消息队列后:
订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功
库存系统:订阅下单的消息,获取下单消息,进行库操作。就算库存系统出现故障,消息队列也能保证消息的可靠投递,不会导致消息丢失(马云这下高兴了).
流量削峰
流量削峰一般在秒杀活动中应用广泛
场景:秒杀活动,一般会因为流量过大,导致应用挂掉。比如业务系统每秒只能处理1000个请求,但是一下子来了5000个请求,那系统就崩了。为了解决这个问题,一般会将用户请求加入消息队列。
引入消息队列后:
1.用户的请求,服务器收到之后,首先写入消息队列,加入消息队列长度超过最大值,则直接抛弃用户请求或跳转到错误页面.
2.秒杀业务根据消息队列中的请求信息,再做后续处理。避免系统崩溃。
使用MQ要考虑什么问题
熟悉后端编程的同学都知道,python,java都有自己的队列函数。比如python的Queue.LifoQueue,Queue.PriorityQueue 。那为啥还要用RabbitMQ这种消息队列中间件呢?
1.高可用
无论是我们使用消息队列来做解耦、异步还是削峰,消息队列肯定不能是单机的。万一这台机器挂了,那我们整个系统几乎就是不可用了。所以,当我们项目中使用消息队列,都是得集群/分布式的。要做集群/分布式就必然希望该消息队列能够提供现成的支持,而不是自己写代码手动去实现。
2. 数据丢失问题
A系统将数据写到消息队列上,系统B和C还没来得及取消息队列的数据,就挂掉了。如果没有做任何的措施,我们的数据就丢了。
3.消费者怎么得到消息队列的消息
两种方法:
生产者将数据放到消息队列中,消息队列有数据了,主动叫消费者去拿(俗称push)
消费者不断去轮训消息队列,看看有没有新的数据,如果有就消费(俗称pull)
4.其他
除了这些,我们在使用的时候还得考虑各种的问题:
消息重复消费了怎么办啊?
我想保证消息是绝对有顺序的怎么做?
……..
基于这些问题,市面上涌现了很多消息队列的中间件。这些MQ中间件几乎都解决了上面的问题,但也存在差异。
常见的MQ产品
这里有一个简介:
ActiveMQ:基于JMS,Apache
RocketMQ:(Rocket,火箭)阿里巴巴的产品,基于JMS,目前由Apache维护
Kafka:分布式消息系统,亮点:吞吐量超级高,每秒中数十万的并发。
RabbitMQ:由erlang语言开发,基于AMQP协议,在erlang语言特性的加持下,RabbitMQ稳定性要比其他的MQ产品好一些,而且erlang语言本身是面向高并发的编程的语言,所以RabbitMQ速度也非常快。且它基于AMQP协议,对分布式、微服务更友好。
科普:
AMQP协议:即Advanced Message Queuing Protocol,是一个应用层标准高级消息队列协议,提供统一消息服务。是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。
相关文章:
消息队列简介
消息队列 在认识rabbitMQ之前,我们需要先认识下消息队列。 消息队列,一般简称为MQ(Message Queue)。先不管消息(Message)这个词,先看看队列(Queue)。 队列就是一种先进先出的数据结构。 所以消息队列可以简单理解为&a…...
SQL中实现汉字的拼音首字母查询
由于汉语拼音首字母也就23个,该方法利用汉字字符按拼音字母排序的特点来生成对应的拼单首字母,只需找到这23个汉语拼音首字母中分别排序在第一的汉字生成23条临时表数据用于参照,即可简单实现汉字匹配拼音首字母 CREATE FUNCTION f_GetPyAcr…...
今天知道LiveData的ktx是真的香
主要还是认知问题,Android 官网从一开始就在推ktx,现在都已经2. 版本了,但是呢,因为之前没有从0开始写过一个Kotlin的APP,就陷入了一个JAVA 思维,在JAVA 中我们知道要做到像协程这么处理不是不能࿰…...
SpringBoot中的桥接模式
桥接模式是一种结构型设计模式,它的主要目的是通过将抽象部分与实现部分分离,提高系统的灵活性和可扩展性。在桥接模式中,有四个主要参与者:抽象类、具体抽象类、桥接类和具体类。 抽象类是定义了抽象方法的基类,这些…...
AI爆文变现脚本:易用且免费的自动写作脚本更新了
之前给大家分享的AI爆文变现写作脚本 由于时间仓促,加上我对很多东西不熟悉 免费版本对新手小白来说,安装部署起来是非常的困难 于是这几天我加班加点把整个软件的部署简化 现在无需复杂的环境配置安装,下载配置下就可以使用了。 免费版…...
代码随想录算法训练营Day 49 || 123.买卖股票的最佳时机III 、188.买卖股票的最佳时机IV
123.买卖股票的最佳时机III 力扣题目链接(opens new window) 给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。 注意:你不能同时参与多笔交易(你必须…...
threejs(11)-精通着色器编程(难点)2
一、shader着色器编写高级图案 小日本国旗 precision lowp float; varying vec2 vUv; float strength step(0.5,distance(vUv,vec2(0.5))0.25) ; gl_FragColor vec4(strength,strength,strength,strength);绘制圆 precision lowp float; varying vec2 vUv; float strength 1…...
配置cuda和cudnn出现 libcudnn.so.8 is not a symbolic link问题
cuda版本为11.2 问题如图所示: 解决办法: sudo ln -sf /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcudnn_adv_train.so.8.1.1 /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcudnn_adv_train.so.8 sudo ln -sf /usr/local/cuda-11.2/targ…...
“目标值排列匹配“和“背包组合问题“的区别和leetcode例题详解
1 目标值排列匹配 1.1 从目标字符串的角度来看,LC139是一个排列问题,因为最终目标子串的各个字符的顺序是固定的? 当我们从目标字符串 s 的角度来看 LC139 “单词拆分” 问题,确实可以认为它涉及到排列的概念,但这种…...
火星加载WMTS服务
这是正常的加载瓦片 http://192.168.1.23:8008/geoserver/mars3d/gwc/service/wmts?tilematrixEPSG%3A4326%3A7&layermars3d%3Abuffer&style&tilerow46&tilecol197&tilematrixsetEPSG%3A4326&formatimage%2Fpng&serviceWMTS&version1.0.0&…...
为什么要学习去使用云服务器,外网 IP能干什么,MAC使用Termius连接阿里云服务器。保姆级教学
目录 引言 可能有人想问为什么要学习云服务器? (获取Linux环境,获得外网IP) 二、安装教程 引言 可能有人想问为什么要学习云服务器? (获取Linux环境,获得外网IP) 1.虚拟机(下策) …...
VS c++多文件编译
前言:记录下我这个菜鸡学习的过程,如有错误恳请指出,不胜感激! 1.简单多文件编译调试 文件目录: 编译: -g选项是告诉编译器生成调试信息,这样可以在程序崩溃或出现错误时更容易地进行调试。这…...
JVM关键指标监控(调优)
JVM 99%情况下不需要调优 使用性能更好的垃圾回收器 核心指标 针对单台服务器而言: jvm.gc.time: 每分钟GC耗时在1s以内 500ms以内最佳 jvm.gc.meantime: 每次YGC耗时在100ms以内,50ms以内最佳 jvm.fullgc.count: FGC(老生代垃圾回收)最多几小时1次&…...
【Proteus仿真】【Arduino单片机】LCD1602-IIC液晶显示
文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器,使用PCF8574、LCD1602液晶等。 主要功能: 系统运行后,LCD1602液晶显示各种效果。 二、软件设计 /* 作者:嗨小…...
skynet学习笔记03— 服务
01、API newservice(name, ...): 阻塞的形势启动一个名为 name 的新服务,待start函数执行完后会返回这个服务的地址。uniqueservice(name, ...):针对于当前节点,启动一个唯一服务(相当于单例),…...
34 Feign最佳实践
2.4.2.抽取方式 将Feign的Client抽取为独立模块,并且把接口有关的POJO、默认的Feign配置都放到这个模块中,提供给所有消费者使用。 例如,将UserClient、User、Feign的默认配置都抽取到一个feign-api包中,所有微服务引用该依赖包…...
软文推广中如何搭建媒体矩阵
媒体矩阵简单理解就是在不同的媒体平台上,根据运营目标和需求,建立起全面系统的媒体布局,进行多平台同步运营。接下来媒介盒子就来和大家聊聊,企业在软文推广过程中为什么需要搭建媒体矩阵,又该如何搭建媒体矩阵。 一、…...
Unity地面交互效果——5、角色足迹的制作
大家好,我是阿赵。 之前几篇文章,已经介绍了地面交互的轨迹做法。包括了法线、曲面细分还有顶点偏移。Shader方面的内容已经说完了,不过之前都是用一个球来模拟轨迹,这次来介绍一下,怎样和角色动作结合,…...
Centos8安装出错问题
科普介绍: CentOS 8 是一个基于 Linux 的操作系统,是 Red Hat Enterprise Linux (RHEL)的免费和开源版本。它提供了稳定、安全和可靠的基础设施,适用于服务器和桌面环境。CentOS 8 是 CentOS 系列中最新的版本&#x…...
计算机网络技术
深入浅出计算机网络 微课视频_哔哩哔哩_bilibili 第一章概述 1.1 信息时代的计算机网络 1. 计算机网络各类应用 2. 计算机网络带来的负面问题 3. 我国互联网发展情况 1.2 因特网概述 1. 网络、互连网(互联网)与因特网的区别与关系 如图所示࿰…...
避开这7个SEO误区:我用Ahrefs工具拯救网站排名的真实案例
避开这7个SEO误区:我用Ahrefs工具拯救网站排名的真实案例 三年前,我的个人博客突然从谷歌第一页消失,日均流量暴跌72%。当时我自认为掌握了SEO的"秘诀"——频繁交换友链、大量堆砌关键词、每日更新短平快内容。直到用Ahrefs跑完完整…...
别再手动删注册表了!一个PowerShell脚本搞定eNSP安装时的WinPcap 4.1.3报错
告别手动清理:用PowerShell自动化解决eNSP与WinPcap的版本冲突 当网络工程师在Windows系统上安装华为eNSP模拟器时,WinPcap 4.1.3的安装报错堪称经典难题。传统解决方案往往要求用户手动操作注册表、系统目录和服务管理器——这种繁琐过程不仅效率低下&a…...
Horos:当医疗影像分析从专业壁垒变为日常工具
Horos:当医疗影像分析从专业壁垒变为日常工具 【免费下载链接】horos Horos™ is a free, open source medical image viewer. The goal of the Horos Project is to develop a fully functional, 64-bit medical image viewer for OS X. Horos is based upon Osiri…...
04月15日AI每日参考:Stanford AI指数报告揭示Agent时代来临,Google I/O确认5月举行
今日概览今天有两件事值得重点关注。Stanford HAI发布2026年AI指数报告,数据显示AI Agent已能完成66%的真实世界计算机任务,中美AI差距基本消除——这不是预测,是已发生的事实。与此同时,Google确认I/O大会5月19-20日举行…...
基于51单片机的智能交通灯控制系统:从仿真原理图到模块化设计实战
1. 智能交通灯控制系统概述 十字路口的交通灯控制是城市交通管理的基础设施,传统固定时长的红绿灯已经无法满足现代交通需求。基于51单片机的智能交通灯控制系统,通过可编程控制实现了灵活的时间调度和多种工作模式。这个系统不仅包含了基本的红绿灯切换…...
像素史诗·智识终端软件测试面试题分析与用例设计生成
像素史诗智识终端软件测试面试题分析与用例设计生成 1. 测试工程师的痛点与解决方案 在软件测试工程师的日常工作中,面试准备和测试用例设计是两大核心挑战。很多测试工程师都遇到过这样的困境:面对五花八门的面试题不知如何系统准备,或者面…...
终极React Native Permissions测试与调试指南:从Jest模拟到真机调试的完整手册
终极React Native Permissions测试与调试指南:从Jest模拟到真机调试的完整手册 【免费下载链接】react-native-permissions An unified permissions API for React Native on iOS, Android and Windows. 项目地址: https://gitcode.com/gh_mirrors/re/react-nativ…...
IntelliJ IDEA 2026.1 安装配置与高效开发环境搭建 (保姆级图文教程)
IDEA 2026.1 部署工具包下载 0. 前言 在 2026 年,IntelliJ IDEA 2026.1 不仅仅是一个编辑器,它已经进化为深度集成 DeepSeek/GPT-4o、支持云原生架构的开发者大脑。对于 Java 程序员来说,环境搭建不仅仅是“装上软件”,更是性能…...
【稀缺首发】SITS2026圆桌闭门纪要:全球仅12家机构获准验证的多模态推理新范式(含3项未公开Benchmark数据)
第一章:SITS2026圆桌:多模态大模型未来趋势 2026奇点智能技术大会(https://ml-summit.org) 在SITS2026圆桌论坛中,来自Meta、DeepMind、中科院自动化所与上海AI Lab的七位首席科学家共同指出:多模态大模型正从“跨模态对齐”迈向…...
LangChain、LangGraph入门
本文主要是基于学习的datawhale关于langchain、langgraoh课程,记录的学习过程与个人看法。 安装依赖 安装langchain、langgraph、openai依赖及用于管理环境变量(python-dotenv)的辅助依赖 pip install langchain langgraph openai langchain_openai python-doten…...
