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 熟悉递归 所有的递归有两个基本特征: 执行时范围不断缩小,这样才能触底反弹。终止判断在调用递归的前面。 写递归的步骤: 从小到大递推。分情况讨论,明确结束条件。组合出完整方法。想验证就从大到小画图推演。 …...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...
windows系统MySQL安装文档
概览:本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容,为学习者提供全面的操作指导。关键要点包括: 解压 :下载完成后解压压缩包,得到MySQL 8.…...
【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验
Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...
通过MicroSip配置自己的freeswitch服务器进行调试记录
之前用docker安装的freeswitch的,启动是正常的, 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...
基于开源AI智能名片链动2 + 1模式S2B2C商城小程序的沉浸式体验营销研究
摘要:在消费市场竞争日益激烈的当下,传统体验营销方式存在诸多局限。本文聚焦开源AI智能名片链动2 1模式S2B2C商城小程序,探讨其在沉浸式体验营销中的应用。通过对比传统品鉴、工厂参观等初级体验方式,分析沉浸式体验的优势与价值…...
