springCloud_day06

目录

[MQ 入门 - 01.MQ 课程介绍](#MQ 入门 - 01.MQ 课程介绍)

[MQ 入门 - 02. 初识 MQ - 同步调用优缺点](#MQ 入门 - 02. 初识 MQ - 同步调用优缺点)

[MQ 入门 - 03. 初识 MQ - 异步调用优缺点](#MQ 入门 - 03. 初识 MQ - 异步调用优缺点)

[MQ 入门 - 04. 初识 MQ - 技术选型](#MQ 入门 - 04. 初识 MQ - 技术选型)

[MQ 入门 - 05.RabbitMQ - 安装部署](#MQ 入门 - 05.RabbitMQ - 安装部署)

问题:设置的账户密码是什么?

[MQ 入门 - 06.RabbitMQ - 快速入门](#MQ 入门 - 06.RabbitMQ - 快速入门)

[MQ 入门 - 07.RabbitMQ - 数据隔离](#MQ 入门 - 07.RabbitMQ - 数据隔离)

[MQ 入门 - 08.Java 客户端 - 快速入门](#MQ 入门 - 08.Java 客户端 - 快速入门)

问题:Java客户端使用mq流程?

问题:mq解决的是什么问题?

[MQ 入门 - 09.Java 客户端 - WorkQueue](#MQ 入门 - 09.Java 客户端 - WorkQueue)

问题:workqueue解决的是什么问题?

[MQ 入门 - 10.Java 客户端 - Fanout 交换机](#MQ 入门 - 10.Java 客户端 - Fanout 交换机)

[MQ 入门 - 11.Java 客户端 - Direct 交换机](#MQ 入门 - 11.Java 客户端 - Direct 交换机)

[MQ 入门 - 12.Java 客户端 - Topic 交换机](#MQ 入门 - 12.Java 客户端 - Topic 交换机)

问题:交换机怎么绑定队列,消费者怎么监听队列,怎么发送消息?

[MQ 入门 - 13.Java 客户端 - 基于 Bean 声明队列交换机](#MQ 入门 - 13.Java 客户端 - 基于 Bean 声明队列交换机)

问题:如何基于代码声明队列交换机?

问题:一般是在消费者还是生产者那一端声明队列和交换机?

[MQ 入门 - 14.Java 客户端 - 基于注解声明队列交换机](#MQ 入门 - 14.Java 客户端 - 基于注解声明队列交换机)

[MQ 入门 - 15.Java 客户端 - 消息转换器](#MQ 入门 - 15.Java 客户端 - 消息转换器)

[MQ 入门 - 16. 业务改造](#MQ 入门 - 16. 业务改造)

末尾页


MQ 入门 - 01.MQ 课程介绍

MQ 入门 - 02. 初识 MQ - 同步调用优缺点

MQ 入门 - 03. 初识 MQ - 异步调用优缺点

MQ 入门 - 04. 初识 MQ - 技术选型

MQ 入门 - 05.RabbitMQ - 安装部署

问题:设置的账户密码是什么?

itheima

123321

MQ 入门 - 06.RabbitMQ - 快速入门

MQ 入门 - 07.RabbitMQ - 数据隔离

admin里面能创建用户,和虚拟机

MQ 入门 - 08.Java 客户端 - 快速入门

问题:Java客户端使用mq流程?

问题:mq解决的是什么问题?

  1. 解决 "同步调用太慢、太脆弱" 的问题

你刚才的支付业务:

  1. 扣余额(user-service)

  2. 改支付单(pay-service)

  3. 改订单状态(trade-service)

如果全部同步调用

  • 任何一个服务慢 → 整个支付就慢

  • 任何一个服务挂 → 支付直接失败

  • 链路越长,越容易超时、异常

MQ 就是把后面不需要立刻执行的步骤,变成异步处理。


  1. 削峰填谷(高并发必备)

秒杀、大促时,订单瞬间暴增:

  • 同步调用 → 数据库、服务直接被冲垮

  • MQ → 先把消息存起来,慢慢消费服务器压力平稳,不会雪崩。


  1. 解耦:服务之间不强依赖

原来:pay-service 必须强依赖 trade-service,必须等它执行完。

用 MQ 后:

  • pay-service 发个消息就不管了

  • trade-service 慢慢消费

  • trade-service 挂了也不影响支付流程

  • 恢复后继续消费,数据最终一致

这就是微服务架构里非常重要的 "解耦"。


  1. 保证最终一致性(比分布式事务更轻)

Seata 是强一致性,性能一般。MQ 是最终一致性,性能高很多。

支付流程最佳实践:

  • 支付核心流程(扣钱)同步执行

  • 后续通知(更新订单、通知物流、积分)丢 MQ 异步执行

既快,又稳定,还不容易挂。


  1. 流量控制,防止数据库被打挂

同步调用时:10000 个请求同时进来 → 10000 个线程同时打数据库

MQ:控制消费者线程数 → 数据库压力永远可控。


  1. 重试机制(网络抖动不怕)

调用远程服务超时、网络波动:

  • 同步调用 → 直接失败

  • MQ → 自动重试,直到成功

对支付、订单这种不能丢数据的场景非常重要。


最简单一句话总结

使用 MQ,就是为了让系统更快、更稳、更松耦合,能抗高并发,还能保证数据不丢、最终一致。

MQ 入门 - 09.Java 客户端 - WorkQueue

问题:workqueue解决的是什么问题?

WorkQueue 解决的是:把 "非核心、非实时" 的任务,从主流程剥离,通过异步队列,实现 "快速响应、流量削峰、数据安全、服务解耦" 的目标。

MQ 入门 - 10.Java 客户端 - Fanout 交换机

MQ 入门 - 11.Java 客户端 - Direct 交换机

MQ 入门 - 12.Java 客户端 - Topic 交换机

问题:交换机怎么绑定队列,消费者怎么监听队列,怎么发送消息?

在mq的exchange里面bind就可以绑定队列

使用注解@RabbitListener(queue="")就可以让消费者方法监听指定的队列

使用@RabbitTemplate里面的converAndSend(队列名,key,信息)

MQ 入门 - 13.Java 客户端 - 基于 Bean 声明队列交换机

问题:如何基于代码声明队列交换机?

问题:一般是在消费者还是生产者那一端声明队列和交换机?

消费者

MQ 入门 - 14.Java 客户端 - 基于注解声明队列交换机

java 复制代码
@RabbitListener(bindings = @QueueBinding(
    value = @Queue(name = "direct.queue1"),
    exchange = @Exchange(name = "hmall.direct", type = ExchangeTypes.DIRECT),
    key = {"red", "blue"}
))
public void listenDirectQueue1(String msg){
    System.out.println("消费者1接收到direct.queue1的消息:【" + msg + "】");
}

@RabbitListener(bindings = @QueueBinding(
    value = @Queue(name = "direct.queue2"),
    exchange = @Exchange(name = "hmall.direct", type = ExchangeTypes.DIRECT),
    key = {"red", "yellow"}
))
public void listenDirectQueue2(String msg){
    System.out.println("消费者2接收到direct.queue2的消息:【" + msg + "】");
}

MQ 入门 - 15.Java 客户端 - 消息转换器

MQ 入门 - 16. 业务改造

问题:我在common配置的配置类想在别的模块使用,那必须得被spring扫描到,怎么扫描到的?

java 复制代码
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  com.hmall.common.config.MyBatisConfig,\
  com.hmall.common.config.MvcConfig,\
  com.hmall.common.config.JsonConfig,\
  com.hmall.common.config.MqConfig
我要让 SpringBoot 启动时,自动加载下面这些配置类!
  1. 为什么要写在这里?

因为:

common 是公共模块,其他模块(item、trade、pay、user)都想自动用里面的配置,不需要自己再写一遍!

SpringBoot 规定:想要让别的模块自动加载配置类,必须写在 spring.factories 里。

你问到了SpringBoot 最核心、最容易被忽略的机制,我用最直白的话给你讲透:

结论先说

你在 common 里写的配置类,并不是靠 @ComponentScan 扫描到的 ,而是靠 spring.factories + @EnableAutoConfiguration 自动装配 被 Spring 加载的。

问题:怎么将.xml中的配置抽取到nacos的公共配置以及怎么使用?

shared-mq.yaml 放到 Nacos → 所有服务引入 shared-configs → 全局统一 MQ 配置!

末尾页

本课程系统介绍了消息队列(MQ)的核心概念与应用实践。内容涵盖MQ基础知识(同步/异步调用对比、技术选型)、RabbitMQ部署使用(安装配置、数据隔离)、Java客户端开发(快速入门、WorkQueue、三种交换机模式)、消息转换器及业务改造等核心知识点。重点讲解了MQ在解决系统解耦、流量削峰、最终一致性等场景中的应用价值,并通过代码示例详细演示了队列声明、消息监听和发送等关键操作。课程还涉及SpringBoot自动装配机制和Nacos配置管理等实用技巧,帮助开发者快速掌握MQ在企业级应用中的实践方法。

相关推荐
cch89182 小时前
ThinkPHP6.x全面升级:性能与功能双飞跃
开发语言·vue.js·后端·golang
IT_陈寒2 小时前
SpringBoot自动配置的坑,我调试到凌晨三点才爬出来
前端·人工智能·后端
golang学习记2 小时前
VS Code官宣:全面支持Rust!
开发语言·vscode·后端·rust
叹一曲当时只道是寻常2 小时前
Tauri v2 + Rust 实现 MCP Inspector 桌面应用:进程管理、Token 捕获与跨平台踩坑全记录
开发语言·后端·rust
5720 天窗3 小时前
classfinal加密Spring boot3
java·spring boot·后端·classfinal·class final
wenzhangli73 小时前
OoderAgent 能力架构:基于 Workflow 控制理论的能力安装管理
后端·架构·asp.net
峥嵘life3 小时前
Android 13 Miracast 投屏代码适配总结
android·后端·asp.net
希望永不加班3 小时前
SpringBoot 整合 Elasticsearch 实现全文检索
java·spring boot·后端·elasticsearch·全文检索
摸鱼的春哥3 小时前
Agent教程22:AI大模型兼容,踩坑到崩溃
前端·javascript·后端