消息队列中间件

1.什么是消息队列?

消息队列,我们一般称为MQ(Message Queue)。

很多初学者认为MQ通过消息的发送和接受来实现程序的异步和解耦,但是实际上MQ的主要目的是通讯。

MQ定义了发送者为生产者,接收消息的那一方为消费者。

2.消息队列的主要作用。

异步,削峰,解耦(重要)。

业务场景

假设一个下单的业务场景,用户在下单之后,需要依次完成扣减余额,扣减库存,通知商家,发送短信,发送京豆等业务。

高可用: 如果其中一个服务宕机(这里的宕机不一定是服务器故障,更多指的是网络延迟,网络缓慢的问题),那么后面的业务都不能执行下去,业务之间的耦合度高。

高并发: 线程数量是有限的,每次处理的请求数量是有限的。在QPS很高的情况,服务很容易被冲垮。

高性能: 上面业务都是串行执行,假设网络传输200ms,业务20ms,完成上面这些操作就要耗时2s,用户的体验极差。并且下单之后业务越多,这个时间越长。

传统设计

在说明消息队列的优势之前,需要先明确传统设计的不足之处

传统设计的思路使用于并发量小,业务体量小的场景下,我们可以很快定位到程序中的错误,这是优势,但当并发量增大的情况下,会产生问题(三高)。

消息队列

如果采用消息队列,再来审视上面三个问题。

高可用: 其中一个模块宕机了,也不会影响其他模块。(假如库存系统宕掉了,那就等他好了之后再取消息消费,库存系统,短信服务还是各司其职)

高并发: 消息队列不处理业务上的逻辑,每次下单只需要把订单消息放到消息队列里面,并且消息队列支持的并发是百万级的,就不需要担心服务被冲垮这回事。

高性能: 用户下单,我们的逻辑就是放消息到消息队列中,请求很快就能返回,用户体验比较好。

消息队列的优点

解耦: 如上面高并发所说,一个服务宕了,不会影响其他服务。

削峰: 假设平时服务只能撑起来几万QPS,当遇到淘宝京东的秒杀活动,服务器直接垮掉。但是有了消息队列,只需要将下单消息放到消息队列中,其他服务从里面取出来正常消费即可,不至于把服务压垮。类似是一个大坝无拦截上游的冲击力。

异步: 连接消息队列的服务模块异步执行。多一个模块,不用改原来的代码,只相当于消息队列多一个消费者。

消息队列的问题

消息队列是完美的吗? 肯定不是,有优点就会有缺点。

第一,在并发量不大的情况下没必要用,反而让系统设计更加复杂。

第二,事务问题。也是最明显的问题。没办法保证所有业务都能执行成功,可能数据不一致(可能下单了,信息也发了,但是库存没减)。既然要用消息队列,就要接受这个问题的存在。只需要保证最终一致性,最终数据是正确的。

第三,可用性。解耦说的是业务模块之间的解耦,但是如果消息队列挂了,会影响所有模块。也就是其他模块对消息队列的依赖性很严重。

KafKa使用

1.添加依赖。

        <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId></dependency>

2.yml配置

spring:kafka:bootstrap-servers: 服务器ip:端口consumer:group-id: 组别名

3.生产者

@RestController
public class KafKaController {@AutowiredKafkaTemplate kafkaTemplate;@RequestMapping("/produce")public String producer(String message){kafkaTemplate.send("order",message);return "生产者生产消息";}
}

4.消费者监听

@Component
public class KafKaListen {//接收来自kafka的消息@KafkaListener(topics = "order")public void listen(ConsumerRecord<String,String> record){System.out.println("接收到消息" + record.value());System.out.println("okk");}
}

----未完待续----

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

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

相关文章

网络工程师笔记11

OSPF协议 priority越大越优先&#xff0c;缺省值是1&#xff0c;范围是0-255 routerID越大越优先&#xff0c;先比较优先值&#xff0c;后比较RouterID 非骨干区域必须要跟骨干区域相连&#xff0c;非骨干区域不能直接通信&#xff0c;必须经过骨干区域 OSPF配置 配置routerID划…

20240308-使用VS2022编译VLD-v2.5.4内存泄漏工具

20240308-使用VS2022编译VLD-v2.5.4内存泄漏工具 一、软件环境 Win10 x64 22h2 JuneVS2022 v17.9.0GIT v2.29.2标签&#xff1a;win10 22h2 vs2022分栏&#xff1a;C 二、硬件环境 Win10 x64的PC台式机 三、获取源码 方法一 git clone https://gitee.com/gdnh22/vld254.…

解决 Webpack 中 ERROR in main Module not found: Error: Can‘t resolve ‘./src‘ 问题

出自 BV1MN411y7pw&#xff0c; P98 黑马AJAX-Node.js-Webpack教学视频中webpack部分&#xff0c;打包的时候出错 ERROR in main Module not found: Error: Cant resolve ./src in V:\Web\mycode\webpack\01_webpack_use resolve ./src in V:\Web\mycode\webpack\01_webpack_us…

探秘Nutch:揭秘开源搜索引擎的工作原理与无限应用可能(一)

本系列文章简介&#xff1a; 本系列文章将带领大家深入探索Nutch的世界&#xff0c;从其基本概念和架构开始&#xff0c;逐步深入到爬虫、索引和查询等关键环节。通过了解Nutch的工作原理&#xff0c;大家将能够更好地理解搜索引擎背后的原理&#xff0c;并有能力利用Nutch构建…

买瓜(dfs+剪枝)

题目描述 小蓝正在一个瓜摊上买瓜。瓜摊上共有 n 个瓜&#xff0c;每个瓜的重量为 Ai 。 小蓝刀功了得&#xff0c;他可以把任何瓜劈成完全等重的两份&#xff0c;不过每个瓜只能劈一刀。 小蓝希望买到的瓜的重量的和恰好为 m 。 请问小蓝至少要劈多少个瓜才能买到重量恰好…

数据结构——二叉树的遍历【前序、中序、后序】

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

单链表详解(如何实现单链表)

文章目录 前言 一、单链表是什么&#xff1f;二、单链表的实现总结 顺序表的缺点 1.中间/头部的插入删除&#xff0c;时间复杂度为O (N) 2.realloc 扩容&#xff08;特别是异地扩&#xff0c;需要申请新空间&#xff0c;拷贝数据&#xff0c;释放旧空间&#xff09;会有不小的…

多场成像,快速提高机器视觉检测能力--51camera

多阵列CMOS传感器与芯片级涂层二向色滤光片相结合&#xff0c;可在单次扫描中同时捕获明场、暗场和背光图像。 多场成像是一种新的成像技术&#xff0c;它可以在不同的光照条件下同时捕获多幅图像。再加上时间延迟积分(TDI)&#xff0c;这种新兴的成像技术可以克服许多限制的传…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《计及台区资源聚合功率的中低压配电系统低碳优化调度方法》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

java-数据结构—树

目录 树的组成 节点 度 根节点 其他组成部分 二叉树 普通二叉树 二叉查找树 二叉树的遍历 前序遍历 中序遍历 后序遍历 层序遍历 总结 平衡二叉树 平衡二叉树的旋转机制 左旋 右旋 需要旋转的四种情况 左左 左右 右右 右左 总结 红黑树 树的组成 节点…

【图(2)】:图的广度优先遍历和深度优先遍历

目录 图的遍历 一、图的广度优先遍历&#xff08;bfs&#xff09; 二、图的深度优先遍历 图的遍历 给定一个图G和其中任意一个顶点v0&#xff0c;从v0出发&#xff0c;沿着图中各边访问图中的所有顶点&#xff0c;且每个顶点仅被遍历一次。"遍历"即对结点进行某种…

MySQL 8.0 的执行计划(EXPLAIN)

MySQL 8.0 的执行计划&#xff08;也称为“EXPLAIN”计划&#xff09;是数据库优化器为 SQL 查询生成的步骤序列。解读执行计划可以帮助数据库管理员&#xff08;DBA&#xff09;和开发者理解查询如何执行&#xff0c;识别潜在的性能问题&#xff0c;并据此优化查询。 下面是如…

一、实战前的准备

目录 系列文章目录 前言 二、项目搭建 三、模块分配 总结 前言 通用后台管理系统使用vue2&#xff0c;使用vue cli构建工具&#xff0c;同时还会使用到element-ui框架进行页面布局&#xff0c;实现顶部导航菜单与左侧导航联动。下面先从三个方面介绍一下通用后台管理的核心…

C++初阶:模板

目录 一.泛型编程 二.函数模板 2.1.函数模板的概念 2.2.函数模板的格式 2.3.函数模板的原理 2.4.函数模板的实例化 隐式实例化 显示实例化 2.5.模板参数的匹配原则 三.类模板 3.1.类模板的格式 3.2.类模板的实例化 3.3.在类模板外部定义成员函数 四.非类型模板参…

系统设计学习(一)分布式系统

分布式系统 CAP 理论 CAP 理论是分布式系统设计中的一个基本原则&#xff0c;它提供了一个思考和权衡一致性、可用性和分区容错性之间关系的框架。 CAP 理论的三个要素如下&#xff1a; 一致性&#xff08;Consistency&#xff09;&#xff1a;在分布式系统中的多个副本或节…

【保姆级】Protobuf详解及入门指南

目录 Protobuf概述 什么是Protobuf 为什么要使用Protobuf Protobuf实战 环境配置 创建文件 解析/封装数据 附录 AQin.proto 完整代码 Protobuf概述 什么是Protobuf Protobuf&#xff08;Protocol Buffers&#xff09;协议&#x1f609; Protobuf 是一种由 Google 开…

PostgreSQL数组查询是否存在某个值

语法 值 ANY (字段);例子 查询ids中包含id5的数据 select * from student where 5 ANY (ids)mybatis select * from student where #{id} ANY (ids)

CrossOver2024实现Mac/Linux上快速运行Win软件和游戏

作为软件产品专家&#xff0c;我对各类软件都有较为深入的了解&#xff0c;下面介绍CrossOver2024这款软件的功能特点。 CrossOver2024是一款功能强大的类虚拟机软件&#xff0c;它的设计目标是在Mac和Linux系统上实现Windows软件和游戏的快速运行。这款软件不仅具有出色的兼容…

Windows下安装Kafka3

本文讲述Windows(win10)下安装Kafka3的方法。基本流程跟《CentOS下安装Kafka3》一样&#xff0c;也是一样需要先安装Java环境&#xff0c;再部署部署Kafka。 首先在官网 Apache Kafka 下载Kafka二进制压缩包。无论是在CentOS还是在Windows下都是下载该压缩包&#xff0c;里面已…

微信小程序实现上下手势滑动切换

效果图 思路 实现一个微信小程序的复合滚动页面&#xff0c;主要通过Swiper组件实现垂直方向的轮播功能&#xff0c;每个轮播项内部使用Scroll-View组件来展示可垂直滚动的长内容&#xff0c;如图片和文本。 代码 <!-- wxml --> <view class"swiper-container…