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

相关推荐
骄马之死7 小时前
SpringMVC + SpringBoot 核心知识点总结
java·spring boot·后端
GoGeekBaird8 小时前
Anthropic技能"(Skills)的经验分享
后端
王码码20358 小时前
多台服务器怎么统一看状态?Beszel 轻量监控,搭起来不费事
运维·服务器·后端·安全·阿里云·接口·web
糖果店的幽灵8 小时前
Spring AI 从入门到精通-Embedding
人工智能·spring·embedding
郑洁文8 小时前
基于Spring Boot的流浪动物救助网站
java·spring boot·后端·毕设·流浪动物救助
指令集梦境10 小时前
Cursor + Spring Boot实战:从零写一个RESTful API
spring boot·后端·restful
码云之上10 小时前
聊聊如何设计一个高效、稳定的 Node.js 接入层
前端·后端·node.js
IT_陈寒11 小时前
Vite项目build后路由404了?你可能漏了这个小配置
前端·人工智能·后端
宸津-代码粉碎机12 小时前
Spring AI企业级实战|从RAG优化到Agent多工具调度
java·大数据·人工智能·后端·python·spring
吴佳浩12 小时前
AI Infra 的真相:Go 没输,rust也不是取代
后端·rust·go