MQ学习笔记

news2024/11/16 7:39:33

1.MQ基本概念

在这里插入图片描述

2.MQ优势

1.服务解耦

**降低服务间耦合性,提升可维护性及扩展性。**
如下图:订单系统发送数据给库存、支付、物流三个系统,但后期又需增加X系统,此时只需X系统自己从MQ获取信息即可,无需改动订单系统代码。

在这里插入图片描述

2.流量削锋 (削锋填谷)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.异步调用

如下图:用户下单之后直接由订单系统返回下单成功即可,而不需等后面的库存系统、支付系统、物流系统都返回才通知用户,异步处理,提速。

在这里插入图片描述
在这里插入图片描述

3.MQ的劣势

在这里插入图片描述

小结

在这里插入图片描述

4.常见MQ对比

在这里插入图片描述

5.RabbitMQ

1.RabbitMQ是基于AMQP协议使用ErLang语言开发的一种消息队列产品。
	AMQP:是一种高级消息队列协议,类比Http
2.RabbitMQ有六种工作模式

官网:https://www.rabbitmq.com/

5.1 RabbitMQ的工作模式

1.简单模式

一个生产者一个消费者

2. work Queues 工作队列模式

多个队列之间属于竞争关系,一条消息只会被一个消费者消费

在这里插入图片描述

3.发布订阅模式

声明交换机,生产者发送消息到交换机后,交换机会将消息发送至所有与之绑定的消息队列,以供不同的消费者消费。

在这里插入图片描述

4.Routting 路由模式

在这里插入图片描述

小结:
Routting路由模式在绑定交换机的时候必须必须指定RouttingKey,消息会转发到符合的Routting key的队列。

交换机的类型必须为direct

5.Topics 通配符模式

在这里插入图片描述
小结:
在这里插入图片描述

6.RabbitMQ工作模式总结

工作模式官网:https://www.rabbitmq.com/getstarted.html

在这里插入图片描述

5.2 RabbitMQ高级特性

1.消息的可靠性投递

使用RabbitMQ的时候,发送方为了防止消息丢失,RabbitMQ提供了两种方式来确保消息投递的可靠性。
·confirm 确认模式:
	消息从producer到exchange(交换机),会返回一个confirmCallBack。
·return 退回模式:
	消息从producer到exchange失败后会返回一个returnCallBack。
我们利用两种callBack控制消息可靠性投递。

2.Consumer ACK机制

在这里插入图片描述

手动签收:
	1.开启手动签收:acknowledge=“manual”
	2.监听器实现ChannelLawareMessageListener接口
	3.如果消息处理成功,则调用channel的basicAck()签收
	4.如果消息处理失败,则调用channel的basicNack()拒绝签收,broker重新发送给Consumer。

3.消费端限流

首先需要确保签收模式为ACK手动签收
listener-consumer 配置属性:perfetch=1 (表示消费端每次从MQ拉取一条消息进行消费,直到手动签收完成才会拉取下一条消息)

4. TTL

TTL:全称time to live(存活时间/过期时间)
	当消息到达过期时间后若还未被消费会被移除。
两种过期模式:
1.队列统一过期时间;
2.消息单独过期时间;
注:如果同时设置了队列过期时间以及消息单独过期时间,以时间短的为准。

5. 死信队列

死信队列,英文缩写:DLX 。Dead Letter Exchange (死信交换机),当消息成为Dead message后,可以被重新发送到另一个交换机,这个交焕机就是DLX。

在这里插入图片描述

消息成为死信的三种情况:
1.队列消息长度到达限制
2.消费者拒接消费消息,basicNack/basicReject,并且不把消息重新放入原目标队列,requeue=false;
3.原队列存在消息过期设置,消息到达超时时间未被消费;
队列如何绑定死信队列
队列绑定死信交换机:
给队列设置参数:x-dead-letter-exchange和x-dead-letter-routing-key

6.延迟队列

延迟队列,即消息进入队列后不会立即被消费,只有到达指定时间后,才会被消费。
需求:
1.下单后,30分钟未支付,取消订单,回滚库存。
2.新用户注册成功7天后,发送短信问候。
实现方式:
	1.定时器:
	2.延迟队列:如下图

在这里插入图片描述

RabbitMQ如何实现延迟队列?
RabbitMQ可以通过 TTL+死信队列 来实现延迟队列效果。

在这里插入图片描述

7.日志与监控

RabbitMQ默认日志存放路径: /var/log/rabbitmq/rabbit@xxx.log

查看日志命令:(控制台查看更直观)
查看队列
	# rabbitmqctl list queues
查看exchanges
	# rabbitmgctl list exchanges
查看用户
	# rabbitmgctl list users
查看连接
	# rabbitmgctl list connections
查看环境变量
	# rabbitmgctl environment
查看未被确认的队列
	# rabbitmqctl list queues name messages unacknowledged
查看单个队列的内存使用
	# rabbitmqctl list queues name memory
查看准备就绪的队列
	# rabbitmactl list queues name messages ready
查看消费者信息
	# rabbitmgctllist consumers

8.消息追踪

在使用任何消息中间件的过程中,难免会出现某条消息异常丢失的情况。
对于RabbitMQ而言,可能是因为生产者或消费者与RabbitMQ断开了连接,而它们与RabbitMQ又采用了不同的确认机制;也有可能是因为交换器与队列之间不同的转发策略;甚至是交换器并没有与任何队列进行绑定,生产者又不感知或者没有采取相应的措施;另外RabbitMQ本身的集群策略也可能导致消息的丢失。
这个时候就需要有一个较好的机制跟踪记录消息的投递过程,以此协助开发和运维人员进行问题的定位
在RabbitMQ中可以使用Firehose和rabbitmg tracing插件功能来实现消息追踪。

9.RabbitMQ应用问题

1.消息的可靠性保障
·消息补偿机制
需求:
	确保消息100%发送成功。
消息补偿方案如下图:

在这里插入图片描述

2.消息的幂等性保障
·乐观锁解决方案

幂等性指一次和多次请求某一个资源,对于资源本身应该具有同样的结果。也就是说,其任意多次执行对资源本身所产生的影响均与一次执行的影响相同
在MQ中指,消费多条相同的消息,得到与消费该消息一次相同的结果
常用幂等性方案,使用数据库的乐观锁,如下图:

在这里插入图片描述

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

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

相关文章

2023失业率再创新高,应届生该何去何从?

最新公布的5月份中国就业数据显示,青年人失业率继续上升。国家统计局新闻发言人、国民经济综合统计司司长付凌晖6月15日在北京回应称,随着经济持续好转,就业保持总体稳定有较好支撑。 国务院新闻办公室当天举行5月份国民经济运行情况新闻发布…

Android 多线程并发详解

一,基础概念 1.1什么是CPU 中央处理器(CPU),是电子计算机的主要设备之一,电脑中的核心配件。其功能主要是解释计算机指令以及处理计算机软件中的数据。CPU是计算机中负责读取指令,对指令译码并执行指令的…

Vue3最佳实践 第七章 TypeScript 上

​ 在浏览网上的JavaScript相关文档时,大家可能已经注意到了一个趋势:越来越多的项目和教程都采用了TypeScript编写代码。对于那些没有TypeScript经验的人来说,阅读这些由TypeScript编写的代码可能会感到有些压力。   ​Vue3的出现无疑加剧…

SpringBoot 如何使用 Grafana 进行可视化监控

使用Spring Boot Sleuth进行分布式跟踪 在现代分布式应用程序中,跟踪请求和了解应用程序的性能是至关重要的。Spring Boot Sleuth是一个分布式跟踪解决方案,它可以帮助您在分布式系统中跟踪请求并分析性能问题。本文将介绍如何在Spring Boot应用程序中使…

墨西哥专线空加派一条龙服务性价比高吗?

随着全球贸易的不断发展,越来越多的企业开始关注跨境物流,以满足国际市场的需求。墨西哥专线空加派一条龙服务作为一种便捷、高效的物流解决方案,越来越受到企业的青睐。那么,墨西哥专线空加派一条龙服务的性价比高吗?本文将从服…

STM32存储左右互搏 I2C总线FATS读写FRAM MB85RC1M

STM32存储左右互搏 I2C总线FATS读写FRAM MB85RC1M 在较低容量存储领域,除了EEPROM的使用,还有铁电存储器FRAM的使用,相对于EEPROM, 同样是非易失性存储单元,FRAM支持更高的访问速度, 其主要优点为没有EEPROM持续写操作…

基于Spring Boot的网上租贸系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技…

台灯什么材质的比较好?专家推荐的护眼台灯分享

台灯是现在普遍使用的家用照明灯具,不仅可以很好地装饰卧室房间,最主要的作用是可以给我我们补充室内灯源不足的部分,让我们工作、学习等保持极高的专注度,也可以在晚上娱乐休闲时,身心更加愉悦。更重要的是&#xff0…

git操作流程与清单

在团队中的git使用流程 git add git stash push -- src/index.js git pull origin master commit push git stash pop git commit和pull的先后顺序 前辈的原文链接 git stash 优质的原文链接 git stash 将本地部分文件暂存,而不提交到远程仓库 使用 git add …

Java——Math类

Java——Math类 Math类是数学操作类,提供了一系列用于数学运算的静态方法。 package com.yushifu.javaAPI; //Math类是数学操作类,提供了一系列用于数学运算的静态方法。 public class MathDemo01 {public static void main(String[] args) {//计算绝对…

淘宝网址链接采集(用 Python 实现淘宝商品信息抓取)

在网页抓取方面,可以使用 Python、Java 等编程语言编写程序,通过模拟 HTTP 请求,获取淘宝网站上的商品页面。在数据提取方面,可以使用正则表达式、XPath 等方式从 HTML 代码中提取出有用的信息。值得注意的是,淘宝网站…

crontab 定时任务详解

使用这个命令自动定时编译 crontab -e 然后输入ctrx 然后输入ctry保存 至此自动编译脚本就做好了。 设置完了之后可以使用crontab -l查看相关内容是不是做好了

基于若依ruoyi-nbcio支持flowable流程增加自定义业务表单(一)

因为需要支持自定义业务表单的相关流程,所以需要建立相应的关联表 1、首先先建表wf_custom_form -- ---------------------------- -- Table structure for wf_custom_form -- ---------------------------- DROP TABLE IF EXISTS wf_custom_form; CREATE TABLE wf…

[每日算法 - 阿里机试] leetcode19. 删除链表的倒数第 N 个结点 「 详细图释一看就懂!」

入口 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/remove-nth-node-from-end…

孙哥Spring源码第28集

第28集 事务基础概念 【视频来源于:B站up主孙帅suns Spring源码视频】【微信号:suns45】 1、什么是事务 保证业务操作完整性的一种数据库机制 (driver 驱动) 2、事务特点 ACID ​ A 原子性 (多次操作 要不一起成功…

【狐妖小红娘】真人剧,王权篇主演定下,二搭情侣,网友:别魔改

Hello,小伙伴们,我是小郑继续为大家深度解析国漫资讯。 近几年【改编】基本成为国内影视剧创作的主流风向,有不少电视剧都是由网文改编而成,尽管国内网文市场庞大,也有不少优质的网文小说,但也耐不住大批量地改编&…

基于Dockerfile搭建LNMP环境

准备工作 #关闭防火墙和防护机制 systemctl stop firewalld systemctl disable firewalld setenforce 0 docker network create --subnet172.18.0.0/16 --opt "com.docker.network.bridge.name""docker1" mynetwork#设置自定义网络模式,模…

海外ASO优化之提高应用下载量的策略有哪些

ASO也被称为应用商店优化,是优化软件使其排名变得更高一个的过程,这提高了应用的可见度,并增加了下载量。ASO并不像看上去那么容易,它需要多次A/B测试和观察,才能确定哪种策略更有效。 1、应用的界面和用户体验。 如果…

泛微OA与ERP集成的关键要点

泛微OA办公系统与ERP系统的集成是为了实现企业内部各个系统之间的数据共享和协同工作,提高工作效率和管理水平。下面将详细介绍泛微OA办公系统如何与ERP系统集成以及轻易云数据集成平台在该过程中发挥的重要作用。 集成方式 泛微OA办公系统与ERP系统的集成可以采用…

Stable Diffusion 最新Ebsynth Utility脚本生成AI动画视频

早期的EbSynth制作的AI视频闪烁能闪瞎人的双眼,可以通过【temporalkit+ebsynth+controlnet】让视频变得丝滑不闪烁,现在又多了一个新的方法,在最新版本的Ebsynth Utility中可以通过脚本进行操作设置,更加简单方便。 插件安装 在你已经安装好Ebsynth之后,如果还没有安装好…