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在企业级应用中的实践方法。

相关推荐
Lee川1 天前
从零解剖一个 AI Agent Tool是如何实现的
前端·人工智能·后端
金銀銅鐵1 天前
[Java] 如何将 Lambda 表达式对应的类保存到 class 文件中?
java·后端
五月君_1 天前
Bun v1.3.14 发布,Rust 版即将进 Claude Code 内测,下一版可能就告别 Zig
开发语言·后端·rust
明月_清风1 天前
🍃 MongoDB 从入门到上手:一篇写给新手的科普指南
后端·mongodb
cheems95271 天前
[Spring MVC] 统一功能与拦截器实践总结
java·spring·mvc
程序员cxuan1 天前
当 00 后开始用 token 给学校送礼
人工智能·后端·程序员
夕颜1111 天前
opencli 使用总结
后端
青云计划1 天前
Feed流
java·后端·spring
☞遠航☜1 天前
搭建基础的springcloud alibaba项目练习
后端·spring·spring cloud
IT_陈寒1 天前
React性能优化踩的坑,这个错你可能也会犯
前端·人工智能·后端