消息队列介绍

什么是 MQ

MQ(message queue),本质是个队列,FIFO 先入先出,只不过队列中存放的内容是 message 而已,还是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中,MQ 是一种非常常 见的上下游“逻辑解耦+物理解耦”的消息通信服务。使用了 MQ 之后,消息发送上游只需要依赖 MQ,不 用依赖其他服务。

为什么要用 MQ

1.流量消峰

image.png
如一个订单系统最多能处理一万次订单 ,当请求量超过最大请求量时,系统就会发生宕机。 使用消息队列做缓冲 ,我们可以取消这个限制,把一秒内下的订单分 散成一段时间来处理,这时有些用户可能在下单十几秒后才能收到下单成功的操作,但是比不能下单的体验要好。

2.应用解耦

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

3.异步处理

image.png
有些服务间调用是异步的,例如 A 调用 B,B 需要花费很长时间执行,但是 A 需要知道 B 什么时候可 以执行完,以前一般有两种方式:

  1. A 过一段时间去调用 B 的查询 api 查询。
  2. A 提供一个 callback api, B 执行完之后调用 api 通知 A 服务。

使用消息总线,可以很方便解决这个问题, A 调用 B 服务后,只需要监听 B 处理完成的消息,当 B 处理完成后,会发送一条消息给 MQ,MQ 会将此 消息转发给 A 服务。这样 A 服务既不用循环调用 B 的查询 api,也不用提供 callback api。同样 B 服务也不 用做这些操作。A 服务还能及时的得到异步处理成功的消息。

MQ 的分类

ActiveMQ

优点: 单机吞吐量万级,时效性 ms 级,可用性高,基于主从架构实现高可用性,消息可靠性较 低的概率丢失数据
缺点: 官方社区现在对 ActiveMQ 5.x 维护越来越少,高吞吐量场景较少使用。

Kafka

优点: 性能卓越,单机写入 TPS 约在百万条/秒,最大的优点,就是吞吐量高。时效性 ms 级可用性非 常高,kafka 是分布式的,一个数据多个副本,少数机器宕机,不会丢失数据,不会导致不可用,消费者采 用 Pull 方式获取消息, 消息有序, 通过控制能够保证所有消息被消费且仅被消费一次;有优秀的第三方 Kafka Web 管理界面 Kafka-Manager;在日志领域比较成熟,被多家公司和多个开源项目使用;功能支持: 功能较为简单,主要支持简单的 MQ 功能,在大数据领域的实时计算以及日志采集被大规模使用
缺点: Kafka 单机超过 64 个队列/分区,Load 会发生明显的飙高现象,队列越多,load 越高,发送消 息响应时间变长,使用短轮询方式,实时性取决于轮询间隔时间,消费失败不支持重试;支持消息顺序, 但是一台代理宕机后,就会产生消息乱序,社区更新较慢;

RocketMQ

优点: 单机吞吐量十万级,可用性非常高,分布式架构,消息可以做到 0 丢失,MQ 功能较为完善,还是分 布式的,扩展性好,支持 10 亿级别的消息堆积,不会因为堆积导致性能下降,源码是 java 我们可以自己阅 读源码,定制自己公司的 MQ
缺点: 支持的客户端语言不多,目前是 java 及 c++,其中 c++不成熟;社区活跃度一般,没有在 MQ 核心中去实现 JMS 等接口,有些系统要迁移需要修改大量代码

RabbitMQ

优点: 由于 erlang 语言的高并发特性,性能较好;吞吐量到万级,MQ 功能比较完备,健壮、稳定、易 用、跨平台、支持多种语言
缺点: 商业版需要收费,学习成本较高

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

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

相关文章

131. 分割回文串 - 力扣(LeetCode)

问题描述 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。 回文串 是正着读和反着读都一样的字符串。 输入示例 s "aab"输出示例 [["a","a","b"],["…

Spring Boot 配置双数据源

Spring Boot 配置双数据源 目录概述需求: 设计思路实现思路分析1.基本步骤2.实例 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for cha…

SpringBoot 统计API接口用时该使用过滤器还是拦截器?

统计请求的处理时间(用时)既可以使用 Servlet 过滤器(Filter),也可以使用 Spring 拦截器(Interceptor)。两者都可以在请求处理前后插入自定义逻辑,从而实现对请求响应时间的统计。 …

一个简单的ETCD GUI工具

使用ETCD没有好用的GUI工具,随手用c#写了一个, 做得好玩的一个ETCD GUI工具,后面加上CLI 工具,类似于 redis Cli工具一样,简化在 Linux下面的操作,不知道有没有必要, git 地址如下,…

【AI】小白入门笔记

前言 2024年,愿新年胜旧年!作为AI世界的小白,今天先来从一些概念讲起,希望路过的朋友们多多指教! 正文 AI (人工智能) 提起AI, 大家可能会想起各种机器人,移动手机的“Siri”,"小爱同学", 是语…

翻译: Anaconda 与 miniconda的区别

Anaconda 和 miniconda 是广泛用于数据科学的软件发行版,用于简化包管理和部署。 1. 主要有两个区别: packages包数量: Anaconda 附带了 150 多个数据科学包,而 miniconda 只有少数几个。Interface接口:Anaconda 有…

中仕教育:研究生毕业可以考选调生吗?

选调生的报考条件之一是应届生,研究生毕业也属于应届生,所以是可以报考的。 选调生不同学历的年龄限制: 1.应届本科生:年龄在25岁以内 2.应届研究生:年龄在30岁以内 3.应届博士生:年龄在35岁以内 研究…

Elasticsearch8 集群搭建(二)配置篇:(1)节点和集群配置

安装完Elasticsearch后,需要对其进行配置,包括以下几部分:节点和集群配置、系统配置、安全配置。 此篇记录节点和集群配置的内容,后续将更新系统配置和安全配置。 节点和集群配置: 通过编辑/usr/local/elasticsearc…

【Oracle】收集Oracle数据库内存相关的信息

文章目录 【Oracle】收集Oracle数据库内存相关的信息收集Oracle数据库内存命令例各命令的解释输出结果例参考 【声明】文章仅供学习交流,观点代表个人,与任何公司无关。 编辑|SQL和数据库技术(ID:SQLplusDB) 【Oracle】收集Oracle数据库内存相关的信息 …

力扣刷MySQL-第三弹(详细讲解)

🎉欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克🍹 ✨博客主页:小小恶斯法克的博客 🎈该系列文章专栏:力扣刷题讲解-MySQL 🍹文章作者技术和水平很有限,如果文中出…

Find My相机|苹果Find My技术与相机结合,智能防丢,全球定位

相机是一种利用光学成像原理形成影像并使用底片记录影像的设备,是用于摄影的光学器械。相机让我们能够记录下美丽的风景和珍贵的时刻。当我们到达一个迷人的地方,或者经历了一个特别难忘的时刻时,我们可以使用照相机来拍摄照片,记录下这些美好的回忆。照相机可以帮助…

[学习笔记]刘知远团队大模型技术与交叉应用L3-Transformer_and_PLMs

RNN存在信息瓶颈的问题。 注意力机制的核心就是在decoder的每一步,都把encoder的所有向量提供给decoder模型。 具体的例子 先获得encoder隐向量的一个注意力分数。 注意力机制的各种变体 一:直接点积 二:中间乘以一个矩阵 三:…

如何使用最新版Xmind打开mmap格式文件

下载MindManager又要钱,百度脑图又点不开脑图笔记中夹杂的文件和图片,下载一个Xmind来查看即可。 1.新建一个Xmind导图 2.导入已经下载好的mmap格式文件: 3. 自己选择那个文件即可: 4. 然后检查没问题,保存成xmind格式…

蓝桥杯、编程考级、NOC、全国青少年信息素养大赛—scratch列表考点

1、小小情报员(202309scratch四级24题) 1.准备工作 (1)选择背景 Colorful City; (2)保留角色小猫,选择角色Ballerina。 2.功能实现 (1)角色小猫初始位置…

【论文阅读】Relation-Aware Graph Transformer for SQL-to-Text Generation

Relation-Aware Graph Transformer for SQL-to-Text Generation Abstract SQL2Text 是一项将 SQL 查询映射到相应的自然语言问题的任务。之前的工作将 SQL 表示为稀疏图,并利用 graph-to-sequence 模型来生成问题,其中每个节点只能与 k 跳节点通信。由…

【SpringBoot】SpringBoot 项目初始化方法

github 搜索 springboot 模板 github 搜索 springboot 模板,拉取现成代码。 SpringBoot 官方的模板生成器 SpringBoot 官方的模板生成器(https://start.spring.io/) 在 IDEA 开发工具中生成 这里我修改成阿里的镜像主要是要使用 Java8。 …

专业137总分439东南大学920专业基础综合考研经验电子信息与通信电路系统芯片

我本科是南京信息工程大学,今年报考东南大学信息学院,成功逆袭,专业137,政治69,英语86,数一147,总分439。以下总结了自己的复习心得和经验,希望对大家复习有一点帮助。啰嗦一句&…

ROS建模:一起从零手写URDF模型

1、机器人的定义与组成 2、URDF建模方法 link的描述部分: 其中geometry中参数origin的xyz单位为: m,其描述的是相对于坐标系的平移变换; rpy单位为:弧度,其描述的是相对于坐标系下的旋转偏移 collision是指碰撞属性…

深度探讨 Golang 中并发发送 HTTP 请求的最佳技术

目录 推荐 使用 Goroutines 的基本方法 Goroutine 入门 处理多个请求 并发 HTTP 请求的方法 基本 Goroutine WaitGroup Channels Worker Pools 使用通道限制 Goroutine 使用信号量限制 Goroutines 那么,最好的方法是什么? 评估你的需求 错误…

DevOps系列文章之 GitLab CI/CD

CICD是什么? 由于目前公司使用的gitlab,大部分项目使用的CICD是gitlab的CICD,少部分用的是jenkins,使用了gitlab-ci一段时间后感觉还不错,因此总结一下 介绍gitlab的CICD之前,可以先了解CICD是什么 我们的开发模式…