1.MQ介绍

MQ

消息队列,本质是一个队列,先进先出,只不过队列中存放的内容是message而已。

为啥学习MQ

1.流量消峰

如果一个订单系统最多每秒能处理一万次订单,正常情况下我们下单1秒后就能返回结果。但是在高峰期,如果有两万次下单操作,系统是处理不了的,只能限制订单超过一万后不允许用户下单。使用消息队列做缓冲,我们可以取消一万笔订单的限制,把一秒内下的订单分散成一段时间来处理,通过排队逐一处理消息,这时有些用户可能在下单十几秒后才能收到下单成功的操作,但是比不能下单的体验要好。

2.应用解耦

电商应用为例,应用中有订单系统、库存系统、物流系统、支付系统。用户创建订单后,如果耦合调用库存系统、物流系统、支付系统,任何一个子系统出现了故障,都会导致下单操作异常。当转变成基于消息队列的方式后,系统间调用的问题会减少很多。比如物流系统发生故障,需要几分钟来修复。在这几分钟时间里,物流系统要处理的内存被缓存在消息队列中,用户的下单操作可以正常完成。当物流系统恢复后,继续处理订单信息即可。下单用户感受不到物流系统的故障,提升系统的可用性。

3.异步处理

 如果A调用B,B需要花很长时间执行。但是A需要指定B什么时候执行完。

传统方式:

1.A等一段时间去调用B的查询api接口去查询B是否执行完。

2.A提供一个回调api接口,B执行完后调用A的回调api通知A服务。

使用消息队列:

A调用B后,只需要监听B处理完成的消息,当B处理完成后,会发送一条消息给MQ,MQ会将此消息转发给A服务。这样A服务既不能循环调用B的查询api,也不用提供回调api。A服务还能及时的到异步处理成功的消息。

MQ的分类

1.ActiveMQ

比较老,维护少,很少使用高吞吐量场景。

2.Kafka

为大数据而生的消息中间件。百万级TPS的吞吐量。性能卓越,单机写入TPS越百万条/s。

Kafka是分布式的,一个数据多个副本,少数机器宕机,不会丢失数据。

Kafka Web管理界面Kafka-Manager。

在日志领域比较成熟。大数据领域实时计算以及日志采集应用广泛。

缺点:Kafka单机超过64个队列/分区,Load会发生明显的飙高现象,队列越多,load越高,发送消息的响应时长变长,消费失败不支持重试,也就是容易丢失消息。支持消息顺序,但是一台代理宕机后,就会产生消息乱序,社区更新较慢。

适用场景:产生大量数据的数据收集业务,大型公司建议使用,是日志采集功能的首选。

3.RocketMQ

阿里巴巴开源产品,java语言编写,设计时候参考了Kafka,并做出自己的改进。被阿里巴巴广泛应用于订单、交易、充值、流计算、消息推送、日志流式处理,binglog分发等场景。

单机吞吐量十万级,可用性非常高,分布式架构,消息可以做到0丢失,mq功能较为完善,还是分布式的,扩展性好,支持10亿级别的消息堆积,不会因为堆积导致性能下降,源码是java可以自己阅读的源码,定制自己公司的MQ。

缺点:支持的客户语言不多,目前是java和C++,其中C++不成熟。社区活跃度一般,没有在MQ核心中去实现JMS等接口,有些系统要迁移需要修改大量代码。

适用场景:为金融互联网领域而生,对于可靠性要求很高的场景,尤其是电商里面的订单扣款,在大量交易涌入时,后端可能无法及时处理的情况。在阿里双11已经经历了多次考验。高并发场景。

4.RabbitMQ

使用AMQP高级消息队列协议基础上完成的,可复用的企业消息系统,是最主流的消息中间件之一。由于erlang语言的高并发特性,性能较好。吞吐量到万级,功能比较完备、健壮、稳定、易用、跨平台、支持多种语言:Python,Ruby,.NET,java,jms,c,php,ActionScript,xmpp,stomp等。

支持ajax文档齐全,开源提供的管理界面非常好,社区活跃度高,更新频率高。

缺点:商业版需要收费,学习成本高。

适用场景:erlang语言本身的并发优势,性能好,时效性微秒级,如果数据量没那么大,中小型公司优选。

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

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

相关文章

mybatisPlus和mybatis的版本冲突问题、若依换成MP、解决git无法推送、使用若依框架的swagger、以后再遇到团队项目应该怎么做。

20240716 一. mybatisPlus和mybatis的版本冲突问题1. 使用前的准备2. 我遇到了一个很严重的问题。3. 解决问题,好吧也没解决,发现问题!! 二、该死的git!!!!1. 解决无法在idea中使用g…

【对顶堆 优先队列】2102. 序列顺序查询

本文涉及知识点 对顶堆 优先队列 LeetCode 2102. 序列顺序查询 一个观光景点由它的名字 name 和景点评分 score 组成,其中 name 是所有观光景点中 唯一 的字符串,score 是一个整数。景点按照最好到最坏排序。景点评分 越高 ,这个景点越好。…

nginx负载均衡实例

实现效果 浏览器输入地址http://nginx服务器ip(:80)/edu/a.html,实现负债均衡效果,平均分配到 服务器ip:8080和 服务器ip:8081进程中。 准备工作 准备两个tomcat,一个监听在8080端口,一个监听在8081端口。也可以准备多个tomcat。…

FreeRTOS的中断管理、临界资源保护、任务调度

什么是中断? 简介:让CPU打断正常运行的程序,转而去处理紧急的事件(程序),就叫中断。 中断优先级分组设置 ARM Cortex-M 使用了 8 位宽的寄存器来配置中断的优先等级,这个寄存器就是中断优先级…

TS 入门(六):TypeScript泛型编程

目录 前言回顾接口与类1. 泛型函数2. 泛型接口3. 泛型类4. 泛型约束5. 多重类型参数与默认类型a. 多重类型参数b. 默认类型参数 结语 前言 在前三章中,我们介绍了 TypeScript 的基础知识、函数与对象类型。在本章中,我们将探讨更高级的类型和类型操作&a…

【STM32】按键控制LED光敏传感器控制蜂鸣器(江科大)

一、按键控制LED LED.c #include "stm32f10x.h" // Device header/*** 函 数:LED初始化* 参 数:无* 返 回 值:无*/ void LED_Init(void) {/*开启时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENAB…

多级表头固定列问题

父级的width,是需要固定的列的width的总和 参考: el-table 多级表头下对应列的固定

springboot基于协同过滤算法的黔醉酒业白酒销售系统lw源码调试讲解

相关技术 2.1 Vue框架 目前市面上出现了许多优秀的前端框架可以解决了许多开发问题,Vue 就是这样一款优秀的框架,它与现代浏览器和支持ES2015的Node.js版本兼容,Vue.js的核心库只关注视图层,非常容易学习和集成到其他库或项目中[…

【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【23】【订单服务】

持续学习&持续更新中… 守破离 【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【23】【订单服务】 订单中心订单信息用户信息订单基础信息商品信息优惠信息支付信息物流信息 订单状态订单流程订单创建与支付逆向流程 订单确认页Feign远程调用丢失请求头问题Feign异步…

基于springboot和mybatis的RealWorld后端项目实战一之hello-springboot

新建Maven项目 注意archetype选择quickstart pom.xml 修改App.java App.java同级目录新增controller包 HelloController.java package org.example.controller;import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotatio…

商业数据分析思维的培训PTT制作大纲分享

商业数据分析思维的培训PTT制作大纲: 基本步骤: 明确PPT的目的和主题 收集并整理相关内容资料 构思并确定PPT的框架大纲 编写PPT的内容文字 插入图片、图表等视觉元素 设计PPT的版式和模板 排练并修改PPT 输出并备份最终版本 目的:数据思维培养; 主题:商业数据分…

LLM微调

文章目录 一. 常见微调分类1.1 全量微调(FFT:Full Fine-tuning)1.2 参数高效微调(PEFT:Parameter-Efficient Fine-Tuning)1.3 指令微调(IFT:Instructional Fine-tuning)1.3.1 Hard prompt1.3.2 …

C++客户端Qt开发——常用控件QWidget

四、常用控件 属性 作用 enabled 设置控件是否可使用.true 表⽰可用,false 表示禁用 geometry 位置和尺寸,包含x,y,width,height四个部分 其中坐标是以⽗元素为参考进行设置的. windowTitle 设置widget标题 windowIcon 设置widget图标 windowO…

Window中 Redis下载安装

Redis7.2.3连接: 我用夸克网盘分享了「redis-windows-7.2.3.zip」,点击链接即可保存。打开「夸克APP」,无需下载在线播放视频,畅享原画5倍速,支持电视投屏。 链接:https://pan.quark.cn/s/4dfb0497707a 在安…

Java读写t5557卡源码

T5557卡是美国Atmel公司生产的多功能非接触式射频卡芯片,属于125KHz的低频卡,在国内有广大的应用市场。该芯片共有330bit(比特)的EPROM(分布为10个区块, 每个区块33bit)。0页的块0是被保留用于设置T5557操作模式的参数配置块。第0页第7块可以作用户数据块…

完善kset_uevent_ops结构体

1、struct kset_uevent_ops 2、实验 #include<linux/module.h> #include<linux/init.h>

win10删除鼠标右键选项-360工具

鼠标右键菜单时&#xff0c;发现里面的选项特别多&#xff0c;找一下属性&#xff0c;半天找不到。删除一些不常用的选项&#xff0c;让右键菜单变得干净整洁。 1、打开360安全卫士&#xff0c;点击功能大全&#xff0c;搜索"右键管理" 2、点击右键管理 3、找到对应的…

SpringCache介绍

SpringCache是Spring提供的缓存框架。提供了基于注解的缓存功能。 SpringCache提供了一层抽象&#xff0c;底层可以切换不同的缓存实现&#xff08;只需要导入不同的Jar包即可&#xff09;&#xff0c;如EHCache&#xff0c;Caffeine&#xff0c;Redis。 2个重要依赖已经导入&a…

C++ 高精度时钟获取当前时间 std::chrono::high_resolution_clock::now

C 高精度时钟获取当前时间 std::chrono::high_resolution_clock::now 1. std::chrono::high_resolution_clock::now1.1. Parameters1.2. Return value1.3. Example 2. std::chrono::milliseconds3. std::chrono::microseconds3.1. Example References 1. std::chrono::high_res…

OpenCV 棋盘格相机标定(保姆版)

目录 一、概述 1.1标定原理 1.2实现步骤 1.3应用场景 二、代码 2.1 cv2.calibrateCamera函数 2.1.1输入参数 2.1.2输出参数 2.2完整代码 三、实现效果 3.1处理图像 3.2内参与畸变系数 一、概述 使用 OpenCV 进行相机标定&#xff0c;通常需要拍摄多张包含棋盘格标定…