【MQ核心概念理解】

news/2024/7/24 1:26:58 标签: rabbitmq

文章目录

  • 一、MQ介绍
    • 1、什么是MQ?为什么要用MQ?
    • 中间服务要保证这些系统可以正常工作,应该要有哪些特性呢?
    • 2、MQ的优缺点

一、MQ介绍

1、什么是MQ?为什么要用MQ?

ChatGPT中对于消息队列的介绍是这样的:
MQ:MessageQueue,消息队列。这东西分两个部分来理解:队列,是一种FIFO 先进先出的数据结构。
消息:在不同应用程序之间传递的数据。将消息以队列的形式存储起来,并且在不同的应用程序之间进行传
递,这就成了MessageQueue。而MQ的作用,从刚才ChatGPT的介绍中就能够抽象出三个关键字:异步、
解耦、削峰。但是这什么意思呢?跟开发有什么关系?我们从一个简单的SpringBoot应用开始说起。
首先搭建一个普通的Maven项目,在pom.xml中引入SpringBoot的依赖:

中间服务要保证这些系统可以正常工作,应该要有哪些特性呢?

1、SpringBoot应用和监控服务应该是解耦的。不管有没有监控服务,SpringBoot应用都要是可以正常运行
的。同时,不管监控服务是用什么语言开发的,同样不应该影响SpringBoot应用的正常运行。更进一步,不
管监控服务要部署多少个,同样也不应该影响SpringBoot应用的正常运行。反过来,从监控服务看
SpringBoot应用也应该是一样的。这就需要这个中间服务可以提供不同语言的客户端,通过不同客户端让消
息生产者和消息消费者之间彻底解耦。
2、SpringBoot应用和监控服务之间处理消息应该是异步的。基于解耦的关系,SpringBoot应用并不需要知
道监控服务有没有运行。所以他并不需要将消息直接发送到监控服务,也不需要保证消息一定会被监控服务
处理。他只要将消息发到中间服务就可以了。而监控服务可以在SpringBoot应用发布了时间之后,随时去接
收处理这些消息。
3、这个中间服务需要可以协调双方的事件处理速度,产生削峰填谷的效果。监控服务一般都是希望每五分
钟接收到SpringBoot发布过来的消息,然后进行一次统计,但是SpringBoot应用发布的事件频率却是不确定
的。如果SpringBoot应用在五分钟内产生了海量的消息,就有可能让监控服务内存撑爆,处理不过来。而监
控服务如果加大内存,SpringBoot应用又有可能在五分钟内根本没有消息,监控服务的内存就白加了。监控
服务的内存配大配小都不合适。这时候,就需要这个中间服务能够这些消息暂存起来,让监控服务可以按照
自己的能力慢慢处理问题。这就是中间服务的削峰填谷的作用。

2、MQ的优缺点

这时候你可能在想,SpringBoot已经提供了本地的事件驱动支持。 那么我是不是给SpringBoot应用加上
一些web接口,基于这些web接口不就可以将本地的这些系统事件以及自己产生的这些事件往外部应用推
送,那这不就成了一个MQ服务了吗?单其实上面列出了MQ的的很多优点。 但是在具体使用MQ时,也会带
来很多的缺点:
系统可用性降低


http://www.niftyadmin.cn/n/5233939.html

相关文章

Clickhouse在货品标签场景的应用

背景 在电商场景中,我们经常需要对货品进行打标签的操作,简单来说就是对货品进行各种分类,按照价格段进行分组,此时运营人员就可以通过价格段捞取到满足条件的商品了,本文就来简单看下这个场景如何在clickhouse中实现…

Docker从入门到实战:Docker快速部署、Dockerfile编写、容器间通信及共享数据实战、Docker-compose详解

文章目录 一、基本概念1、体系结构2、容器与镜像1&#xff09;镜像2&#xff09;容器a、容器内部结构b、容器生命周期 3、执行流程 二、常用命令docker pull 镜像名<:tags> &#xff1a;从远程仓库抽取镜像docker images&#xff1a;查看本地镜像docker run 镜像名<:t…

jvm基本概念,运行的原理,架构图

文章目录 JVM(1) 基本概念:&#xff08;2&#xff09;运行过程 今天来和大家聊聊jvm&#xff0c; JVM (1) 基本概念: JVM 是可运行Java代码的假想计算机&#xff0c;包括一套字节码指令集、一组寄存器、一个栈一个垃圾回收&#xff0c;堆 和 一个存储方法域。JVM 是运行在操作…

使用 kubeadm 部署 Kubernetes 集群(三)kubeadm 初始化 k8s 证书过期解决方案

一、延长k8s证书时间 查看 apiserver 证书有效时间&#xff1a;默认是一年的有效期 [rootxuegod63 ~]# openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep Not 延长证书过期时间 1.把 update-kubeadm-cert.sh 文件上传到 xuegod63 节点 vim update-…

【NeurIPS 2023】PromptIR: Prompting for All-in-One Blind Image Restoration

PromptIR: Prompting for All-in-One Blind Image Restoration&#xff0c; NeurIPS 2023 论文&#xff1a;https://arxiv.org/abs/2306.13090 代码&#xff1a;https://github.com/va1shn9v/promptir 解读&#xff1a;即插即用系列 | PromptIR&#xff1a;MBZUAI提出一种基…

指针常量和常量指针的区别

文章目录 指针常量常量指针即是指针常量又是常量指针 指针常量 指针常量的本质是常量&#xff0c;表示的是 这个指针所指向的地址不能发生改变。即指针变量的值&#xff08;即地址值&#xff09;不能发生修改。但是指针所指向的那块内存里的值是可以修改的。 注意&#xff1a;…

uniapp和vue3+ts实现自定义头部导航栏左侧胶囊内容

由于某些原因&#xff0c;可能需要我们自己定义头部导航栏的内容&#xff0c;实现各种设计师画的设计稿&#xff0c;所以就需要这个自定义的组件&#xff0c;实现的内容&#xff1a;自定义标题和左侧胶囊图标内容&#xff0c;也可以自定义搜索内容到里面&#xff0c;实现的效果…

Angular中的单向和双向数据绑定

1、单向数据绑定&#xff1a; 单向数据绑定是指数据从组件流向视图或从视图流向组件&#xff0c;但数据的流动是单向的。 在Angular中&#xff0c;主要有以下两种形式的单向数据绑定&#xff1a; 从组件到视图&#xff08;插值表达式&#xff09;&#xff1a; 使用插值表达式…