1.2 初识MQ

简介: 异步调用基于消息通知,通过消息发送者、Broker和接收者实现解耦。常见MQ有ActiveMQ、RabbitMQ、RocketMQ、Kafka,适用于异步处理、系统解耦和流量削峰。Spring Boot集成RabbitMQ,支持AMQP协议,本课程重点讲解RabbitMQ应用。

异步调用方式其实就是基于消息通知的方式,一般包含三个角色:
● 消息发送者:投递消息的人,就是原来的调用方
● 消息Broker(消息代理/消息中间件):管理、暂存、转发消息,你可以把它理解成微信服务器
● 消息接收者:接收和处理消息的人,就是原来的服务提供方

在异步调用中,发送者不再直接同步调用接收者的业务接口,而是发送一条消息投递给消息Broker。然后接收者根据自己的需求从消息Broker那里订阅消息。每当发送方发送消息后,接收者都能获取消息并处理。
这样,发送消息的人和接收消息的人就完全解耦了。
消息Broker,目前常见的实现方案就是消息队列(MessageQueue),简称为MQ.
AI:消息队列的应用场景

  1. 异步处理:
    a. 场景: 当应用程序需要执行耗时的操作(如发送电子邮件、文件上传或下载等)时,可以将这些任务发送到消息队列中,由专门的任务处理程序异步执行。
    b. 好处: 减少了用户的等待时间,提高了用户体验。
  2. 解耦:
    a. 场景: 当一个系统由多个组件组成时,这些组件之间可以使用消息队列进行通信。
    b. 好处: 单个组件的变化不会直接影响到其他组件,提高了系统的可扩展性。
  3. 流量削峰
    a. 场景:在许多互联网应用和服务中,尤其是那些具有明显周期性流量特征的应用(如电商平台、社交网络等),常常会遇到流量突增的情况。例如,在电商促销期间,大量的用户会在短时间内访问网站并提交订单,这种短时间内产生的巨大流量可能会导致服务器过载,影响用户体验甚至导致服务不可用。
    b. 好处:当流量激增时接收到请求会被暂时存储在消息队列中,而不是直接发送到后端服务进行处理。这样做可以避免后端服务因为短时间内处理大量请求而过载。后端服务可以从消息队列中按需拉取消息进行处理。这种异步处理机制可以有效地分散流量峰值,确保后端服务的稳定运行。如下图:

目比较常见的MQ实现:
● ActiveMQ:https://activemq.apache.org/
● RabbitMQ:https://www.rabbitmq.com/
● RocketMQ:https://rocketmq.apache.org/
● Kafka:https://kafka.apache.org/
几种常见MQ的对比:
● 追求可靠性:RabbitMQ、RocketMQ
● 追求吞吐(高并发)能力:RocketMQ、Kafka
● 追求消息低延迟:RabbitMQ、Kafka
这四种的MQ在市场都是非常流行,本课程讲解RabbitMQ。
Spring Boot默认支持AMQP协议,RabbitMQ支持AMQP协议 。

相关文章
|
网络协议 Windows
两步带你解决IDEA 插件下载安装慢、超时、不成功问题
这篇文章提供了解决IDEA插件下载慢或超时问题的方案,通过查找国内插件节点IP地址并修改本地hosts文件来加速下载。
两步带你解决IDEA 插件下载安装慢、超时、不成功问题
|
2月前
|
Ubuntu Linux 数据安全/隐私保护
5 分钟共享打印机:用 Docker 一键部署 CUPS
家庭/小团队共享打印机太麻烦?本文教你5分钟用Docker一键部署CUPS打印服务:拉取`anujdatar/cups`,一条命令启动容器,Web界面添加HP Smart Tank等IPP打印机,局域网内所有设备(Win/mac/Linux/手机)即可无线打印,配置持久化、操作零门槛!
858 0
5 分钟共享打印机:用 Docker 一键部署 CUPS
|
6月前
|
人工智能 关系型数据库 MySQL
1分钟阿里云部署OpenClaw流程+扩展机制解析+用RDS MySQL释放 Agent 全能力与避坑手册
在OpenClaw生态中,实现自定义能力主要有三种路径:Skill、Tool与Plugin。很多用户习惯用前两者,但面对**深度介入Agent生命周期**、**自动执行逻辑**、**替换核心模块**等场景时,只有Plugin能真正满足需求。
1018 3
|
9月前
|
自然语言处理 算法
分词器详解
分词器将文本转为模型可处理的数字序列,主流算法包括BPE、WordPiece和SentencePiece。BPE高效但中文支持弱;WordPiece适合英文,用于BERT;SentencePiece语言无关,尤擅中文。实战中需结合语种与需求选择,并合理配置参数与特殊标记。
|
9月前
|
Java Maven 开发工具
2 IDEA环境配置
安装IDEA并配置编码、自动导包、忽略大小写提示及Java编译级别;安装Maven并配置本地仓库与阿里云镜像;在IDEA中设置Maven环境;安装Git并配置用户信息与IDEA集成;Fork并克隆黑马商城项目,创建数据库hmall并导入SQL;修改application-dev.yaml中的数据库连接信息;启动后端项目与Nginx前端服务,确保端口无冲突。
|
9月前
|
消息中间件 Java 数据安全/隐私保护
RabbitMQ集群部署
本文介绍RabbitMQ集群部署及高可用方案,涵盖普通集群搭建、镜像模式配置与仲裁队列使用。通过Docker部署三节点集群,配置Erlang Cookie与rabbitmq.conf实现节点通信;利用镜像模式实现数据冗余,支持主从切换;引入3.8版本后的仲裁队列,简化高可用配置,提升系统容错能力。
|
9月前
|
监控 Java 数据库
1.4. sentinel降级
本文介绍如何在微服务中使用Sentinel对A服务自身接口进行限流与降级。通过@SentinelResource注解定义资源,设置限流规则,并实现fallback和blockHandler方法处理异常与限流降级。同时对比Feign远程调用与非远程调用的降级方式,结合信号量隔离实现线程级防护,保障系统稳定性。
|
9月前
|
消息中间件 JSON Java
3.9.2 配置JSON转换器
为优化消息序列化,采用JSON格式替代JDK默认方式。在publisher和consumer中引入Jackson依赖(若已引入web starter则无需重复添加),并配置`Jackson2JsonMessageConverter`作为消息转换器,启用自动生成消息ID。通过MQ控制台验证消息结构,并在消费者端使用Map接收发送的Object消息,确保收发一致。
|
9月前
|
消息中间件 Java Nacos
SpringCloud概述
Spring Cloud应微服务需求而生,提供统一解决方案,具备约定大于配置、组件丰富、开箱即用等特点。通过地铁站命名版本,避免子项目冲突。Spring Cloud Alibaba融合阿里实践,推出Nacos、Sentinel、Seata等优秀组件,弥补Netflix停更短板,成为主流选择。本节概述其演进、生态及技术选型依据,为后续实战奠基。(238字)
|
9月前
|
缓存 Java Nacos
@RefreshScope热更新原理
@RefreshScope通过组合@Scope("refresh")实现配置热更新,其核心是利用动态代理与缓存机制。标注该注解的Bean会被放入自定义refresh scope缓存,配置变更时清空缓存,触发Spring重新创建Bean实例,从而重新注入最新配置值,实现毫秒级动态刷新。