RabbitMQ-消息中间件学习记录(what-how-why)
-
什么是消息中间件
简单的来说就是消息队列中间件,生产者发送消息到中间件,消息中间件用于保存消息并发送消息到消费者。 -
消息中间件RabbitMQ的基本组件
1)producer -生产者
2)customer -消费者
3)broker (经纪人)- MQ服务器,管理消息对列、消息及相关消息。(接收并存储生产者发送的消息,发送消息到消费者)
4)exchange-交换机,将生产者的消息按照一定规则发送给对应的消息对列queue
5)queue-消息对列,队列,消息存放的容器,消息先进先出
6)Message-消息,程序间的通信的数据 -
什么是消息队列queue(生产者生产msg-queue,消费者监听queue-消费)
消息对列是一种分布式中的通信方式,它通过异步传输消息的方式,来解耦消 息的 生产者和消费者。在消息中间件中,生产者将消息发送到消息对列中,以为先进先出的方式,消费者从对列中取出消息(可以监听对列是否有消息-@RabblitListener和@RabbitHandler) -
消息中间件的作用
主要有三个作用:分别是服务解耦、实现异步通信、流量削峰
1). 服务解耦:(场景-用户下订单、库存服务工作)
例如订单服务-用户下订单,库存服务处理对应减库存,才返回给用户下单成功的消息。如果说库存服务出现了问题,就会造成订单丢失等问题。如果使用消息中间件(消息对列),可以把下的订单信息—> mq就返回用户下单这个,mq再发送给库存服务,这样生产者发送消息和消费者接收处理消息相互不影响,即使宕机了,消息还在中间件中。
2). 异步通信/异步调用:(用户注册新用户,服务发送短信和邮件)
传统的模式,用户注册系统新用户,服务给用户发送短信和邮件,三个操作都完成之后才返回用户下单注册的消息。因为短信和邮箱和注册信息是没有关系的服务,用户注册后消息发送给mq,用户不需要等邮件和短信发送成功,mq直接返回用户注册成功,至此用户注册业务完成。至于短信和邮件交给mq发送给短信业务-去发送。
注意:异步就是某线程发出请求,不需要等其他线程完成就接着完成操作。用户注册,消息发送给mq,不需要等短信服务完成,短信发布发送都与注册无关,两者是异步关系。异步不是并发,所有操作同时进行,异步是各过各的。
3). 流量削峰:(商品秒杀)
例如商品秒杀的时候,这时候数据库并不能承受这么大的请求。可以把请求下订单的信息暂存在mq中,返回给用户下单成功,之后的操作由mq发送给对应的服务处理。缓存数据减少数据库的压力。
-
为什么需要使用消息中间件
服务解耦、异步通信、流量削峰 -
消息中间件在分布式系统中使用场景(异步)
6.1 服务解耦-订单和库存服务。用户下订单,消息发给mq,mq返回用户下订单成功,消费者-库存服务接收mq消息再去调用减少库存的消息。
6.2 异步通信-用户注册新账户 用户注册和admin发送短信和邮件异步
6.3 流量削峰-商品秒杀,先mq先存储订单信息,返回订单服务下单成功,后慢慢处理。减少大并发对数据库的影响。 -
RabbitMQ的五种消息模型/工作模式、
1) simple 简单的一对一模式,producce-queue-customer
2) word模式,一个消息对列queue—> 多个消费者,消费者争抢消息队列里面消息,注意一个消息只能被一个消费者消费。
3) fanout-广播、订阅者模式。交换机将消息发送给所有binding的对列,消费端可以有多个customer使用word模式消费对列的消息。
4)topic-主体模式,生产者的消息按照不同的路由规则,模糊匹配给不同满足条件的消息对列,消费者再去消费对列中消息
5)routeKey,路由键(exchange-type-direct),按照不同的路由键发送到对应的queue中。 -
消息中间件是异步还是同步
异步,各干各的,互不影响。(异步并不是并发-同时请求一个请求)。received生产者的message,send消息到消费者。二者是异步,解耦合互不影响。 -
mq的消息确认机制confirm
- . 对于生产者端来说,主要有两种确认机制
a. message到broker后,mq立马确认confirm并返回消息告知生产者消息发送成功,如果失败也告知生产者,并重新发送。
b. message到MQ之后,如果消息对列没有received成功(queue存储msg成功),会确认并返回消息接收失败到生产者
a b 保证了生产者端不会丢失消息。
2). 对于消费者来说。
a. 消费者接收到queue的消息后,默认自动确认,queue删除该message。
b. 消费者接收到msg后,对数据进行逻辑处理,如果直接confirm-queue直接删除msg,处理数据过程中可能会宕机消息丢失。
----设置为手动confirm确认收货,数据处理完再收货成功,queue再去删除msg。也可以对数据不满,退回到queue重新入队,也可以直接删除数据。
c. 接收失败告知queue,不会删除数据,重新发送给customer
这样避免数据在消费者端丢失
- . 对于生产者端来说,主要有两种确认机制
1、2两种方式避免了mq的消息丢失。
以下是消息中间件MQ的相关代码和配置信息
- 使用MQ的步骤
1)在pom文件中加上依赖amqp
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency
2) 配置文件配置rabbit服务器的对应信息(spring.rabbitmq host、port,username,ps等)
spring.rabbitmq.host=rabbitmq服务器地址信息
spring.rabbitmq.port=端口号
spring.rabbitmq.username=账户name
spring.rabbitmq.password=密码
spring.rabbitmq.virtual-host=/
#1. 生产者发送message, mq收到消息就确认回复到生产者
spring.rabbitmq.publisher-confirms=tr
#2. queue消息对列接收生产者的消息失败,就确认返回消息到生产操者
spring.rabbitmq.publisher-returns=true
#3. 消费者接收queue消息对列的消息之后,手动确认
spring.rabbitmq.listener.simple.acknowledge-mode=manual
3) 服务启动类上面加上注解@EnableRabbit-开启MQ
在springboot启动类加上 @EnableRabbit-开启MQ
相关文章:
RabbitMQ-消息中间件学习记录(what-how-why)
什么是消息中间件 简单的来说就是消息队列中间件,生产者发送消息到中间件,消息中间件用于保存消息并发送消息到消费者。 消息中间件RabbitMQ的基本组件 1)producer -生产者 2)customer -消费者 3)broker (经纪人)- MQ…...
前端HTML进阶
day02:列表、表格、表单 目标:掌握嵌套关系标签的写法,使用列表标签布局网页 01-列表 作用:布局内容排列整齐的区域。 列表分类:无序列表、有序列表、定义列表。 无序列表 作用:布局排列整齐的不需要规…...
Python“牵手”lazada商品详情页数据采集方法,lazadaAPI接口申请指南
lazada详情接口 API 是开放平台提供的一种 API 接口,它可以帮助开发者获取商品的详细信息,包括商品的标题、描述、图片等信息。在电商平台的开发中,详情接口API是非常常用的 API,因此本文将详细介绍详情接口 API 的使用。 一、la…...
买机票系统---(java实现)
/* * 案例 * 卖机票 * 需求:机票价格按照淡季和旺季,头等舱和经济舱收费,输入机票原价,月份和头等舱或经济舱 * 旺季(5-10月):头等舱9折,经济舱8.5折 * 淡季(11-来年4月&…...
“new出对象“原理的深层解密
🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏1: 🍔🍟🌯C语言初阶 🐻推荐专栏2: 🍔🍟🌯C语言进阶 🔑个人信条: 🌵知行合一 …...
Java基础篇--SecureRandom(安全随机)类
java.security.SecureRandom类是Java中用于生成安全的随机数的一个类。与普通的Random类不同,它提供了一种可信赖的随机数生成器,用于生成具有高度随机性的随机数。 SecureRandom类的实例使用了更加安全的随机数生成算法,这些算法通常经过密…...
论文复现--关于多视角动作捕捉工具箱 --XRMoCap的研究
分类:动作捕捉 github地址:https://github.com/openxrlab/xrmocap 所需环境: Ubuntu18.04,conda22.9.0,CUDA11.4 目录 环境配置 环境配置 conda create -n XRmocap python3.7 -y conda activate XRmocap# install ffm…...
Spring Profile与PropertyPlaceholderConfigurer实现项目多环境配置切换
最近考虑项目在不同环境下配置的切换,使用profile注解搭配PropertyPlaceholderConfigurer实现对配置文件的切换,简单写了个demo记录下实现。 基本知识介绍 Profile Profile通过对bean进行修饰,来限定spring在bean管理时的初始化情况&#…...
ansible入门
ansible入门 一.ansible 背景介绍 Ansible 是一个广受欢迎的 IT 自动化系统。可以用来处理配置管理、应用自动化部署、云资源配给、网络 自动化和多借点部署等任务。其也可以使得复杂的变更如带负载均衡的零停机滚动更新更加容易。Ansible.com 1.1 自动化运维概念 1.1.1 运维…...
用Node.js吭哧吭哧撸一个运动主页
简单唠唠 某乎问题:人这一生,应该养成哪些好习惯? 问题链接:https://www.zhihu.com/question/460674063 如果我来回答肯定会有定期运动的字眼。 平日里也有煅练的习惯,时间久了后一直想把运动数据公开,…...
【C++】STL---vector
STL---vector 一、vector 的介绍二、vector 的模拟实现1. 容量相关的接口(1)size(2)capacity(3)reserve(4)resize(5)empty 2. [] 重载3. 迭代器4. 修改数据相…...
机器学习:基本介绍
机器学习介绍 Hnad-crafted rules Hand-crafted rules,叫做人设定的规则。那假设今天要设计一个机器人,可以帮忙打开或关掉音乐,那做法可能是这样: 设立一条规则,就是写一段程序。如果输入的句子里面看到**“turn of…...
基于长短期神经网络LSTM的碳排量预测,基于LSTM的碳排放量预测
目录 背影 摘要 LSTM的基本定义 LSTM实现的步骤 基于长短期神经网络LSTM的碳排放量预测 完整代码: 基于长短期神经网络LSTM的碳排放量预测,基于LSTM的碳排放量预测资源-CSDN文库 https://download.csdn.net/download/abc991835105/88184632 效果图 结果分析 展望 参考论文 背…...
日常BUG——SpringBoot关于父子工程依赖问题
😜作 者:是江迪呀✒️本文关键词:日常BUG、BUG、问题分析☀️每日 一言 :存在错误说明你在进步! 一、问题描述 在父子工程A和B中。A依赖于B,但是A中却无法引入B中的依赖,具体出现的…...
Zabbix监控tomcat
文章目录 一、安装部署TomcatTomcat二、安装Tomcat1.安装zabbix-agent收集监控数据(192.168.40.104)2.安装部署Zabbix-server(192.168.40.105)3.配置数据库 三、Zabbix监控Tomcat页面设置 实验环境 主机用途Centos7:192.168.40.105zabbix-server,zabbix-java-gatew…...
CentOS-6.3安装MySQL集群
安装要求 安装环境:CentOS-6.3 安装方式:源码编译安装 软件名称:mysql-cluster-gpl-7.2.6-linux2.6-x86_64.tar.gz 下载地址:http://mysql.mirror.kangaroot.net/Downloads/ 软件安装位置:/usr/local/mysql 数据存放位…...
项目管理的艺术:掌握成本效益分析
引言 在项目管理中,我们经常面临着如何有效地使用有限的资源来实现项目目标的挑战。为了解决这个问题,我们需要使用一种强大的工具——成本效益分析。通过成本效益分析,我们可以评估和比较不同的项目选项,选择最具成本效益的项目…...
护眼灯值不值得买?什么护眼灯对眼睛好
想要选好护眼台灯首先我们要知道什么是护眼台灯,大的方向来看,护眼台灯就是可以保护视力的台灯,深入些讲就是具备让灯发出接近自然光特性的光线,同时光线不会伤害人眼而出现造成眼部不适甚至是视力降低的照明设备。 从细节上看就…...
【设备树笔记整理4】内核对设备树的处理
1 从源头分析_内核head.S对dtb的简单处理 1.1 bootloader向内核传递的参数 (1)bootloader启动内核时,会设置r0,r1,r2三个寄存器: r0一般设置为0;r1一般设置为machine_id (在使用设备树时该参数没有被使用…...
算法通关村第七关——递归和迭代实现二叉树前中后序遍历
1.递归 1.1 熟悉递归 所有的递归有两个基本特征: 执行时范围不断缩小,这样才能触底反弹。终止判断在调用递归的前面。 写递归的步骤: 从小到大递推。分情况讨论,明确结束条件。组合出完整方法。想验证就从大到小画图推演。 …...
Unlock Music:解决加密音乐格式限制的创新方案
Unlock Music:解决加密音乐格式限制的创新方案 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: https://gitc…...
微软Phi-3-mini保姆级教程:一键部署,快速体验文本生成
微软Phi-3-mini保姆级教程:一键部署,快速体验文本生成 1. 镜像简介与特点 1.1 模型背景 Phi-3-mini-4k-instruct-gguf是微软推出的轻量级文本生成模型,属于Phi-3系列中的高效版本。这个模型特别适合处理问答、文本改写、摘要整理等常见文本…...
CCS12.2搭配C2000ware 4.03导入工程报错?手把手教你修复头文件路径变量(MATLAB 2023b适用)
CCS12.2与C2000ware 4.03工程导入报错全解析:从路径变量修复到MATLAB 2023b联调实战 当你满怀期待地将MATLAB 2023b生成的代码导入CCS12.2,准备与C2000ware 4.03来场完美邂逅时,编译器却毫不留情地抛出一连串头文件找不到的错误——这种从云端…...
FolioReaderKit文本转语音功能:如何实现TTS语音朗读的详细指南
FolioReaderKit文本转语音功能:如何实现TTS语音朗读的详细指南 【免费下载链接】FolioReaderKit 📚 A Swift ePub reader and parser framework for iOS. 项目地址: https://gitcode.com/gh_mirrors/fo/FolioReaderKit 📚 FolioReader…...
保温vs隔热
保温vs隔热 什么是保温,什么是隔热?保的什么温,隔的什么热? 1 保温vs隔热 保温vs隔热是门窗幕墙行业耳熟能详的两个词:比如门窗保温性能,隔热铝合金窗等等。那么什么是保温,什么是隔热呢? GB/T 8478-2020《铝合金门窗》中给出了门窗保温性能和隔热性能的定义。 门…...
零基础入门:5分钟用Xinference部署gte-base-zh,开启文本向量化之旅
零基础入门:5分钟用Xinference部署gte-base-zh,开启文本向量化之旅 1. 准备工作:认识gte-base-zh 1.1 什么是文本向量化 想象一下,当你看到"苹果"这个词时,脑海中会浮现什么?可能是水果&#…...
SEO_2024年最新SEO趋势与实战操作指南(313 )
2024年最新SEO趋势分析:揭秘百度收录的核心要点 在数字营销的快速发展中,SEO(搜索引擎优化)始终是网站运营者和内容创作者关注的重点。尤其是在中国市场,百度作为主流搜索引擎,其优化策略和趋势更是需要深…...
Go Routine 调度与系统线程分析
Go语言凭借其轻量级的并发模型在开发者中广受欢迎,而Go Routine作为其核心并发机制,与系统线程的交互方式一直是性能优化的关键。本文将深入分析Go Routine的调度原理及其与系统线程的关系,帮助开发者理解高并发场景下的底层运行机制…...
NMEA0183嵌入式解析库:协议解析与NMEA2000桥接引擎
1. NMEA0183库概述:面向嵌入式平台的航海通信协议解析与桥接引擎NMEA0183(National Marine Electronics Association 0183)是全球航海电子设备间最广泛采用的串行通信标准,定义了ASCII格式的文本消息结构、电平规范(RS…...
你的RAG应用安全吗?藏在向量数据库里的‘特洛伊木马’——外部数据注入风险详解
RAG应用安全深度剖析:如何抵御外部数据源中的"特洛伊木马" 当你在咖啡馆用手机查看银行账户时,是否想过那个看似无害的二维码可能藏着窃取密码的指令?类似的威胁正在AI领域上演——攻击者通过污染RAG(检索增强生成&…...
