【MQ核心概念理解】

文章目录

  • 一、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时,也会带

来很多的缺点:

系统可用性降低

相关推荐
无理 Java1 小时前
【技术解析】消息中间件MQ:从原理到RabbitMQ实战(深入浅出)
java·分布式·后端·rabbitmq·多线程·mq·消息中间件
DYS_000017 小时前
01_RabbitMQ安装及工作模式
分布式·rabbitmq
青石路8 小时前
记一次 RabbitMQ 消费者莫名消失问题的排查
rabbitmq
lovPopcorn1 天前
MQ入门(一):同步调用和异步调用--RabbitMQ基础入门
java·rabbitmq
.生产的驴1 天前
SpringBoot 消息队列RabbitMQ 交换机模式 Fanout广播 Direct定向 Topic话题
spring boot·rabbitmq·java-rabbitmq
王彬泽1 天前
【RabbitMQ】消息分发、事务
rabbitmq·事务·消息分发
杰信步迈入C++之路2 天前
【RabbitMQ】RabbitMQ 概述
分布式·rabbitmq
BLUcoding2 天前
RabbitMQ08_保证消息可靠性
java·rabbitmq
月夜星辉雪2 天前
【RabbitMQ 项目】服务端:数据管理模块之消息管理
分布式·rabbitmq
不能再留遗憾了2 天前
RabbitMQ 高级特性——发送方确认
分布式·rabbitmq·ruby