尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
第46篇:微服务实战:Spring Cloud Alibaba+RabbitMQ,开发微服务系统
一、前言在分布式微服务开发领域Spring Cloud Alibaba凭借开箱即用、组件完善、适配国内开发环境的优势成为中小企业微服务架构的首选方案。传统单体系统拆分微服务后会面临服务注册发现、配置管理、流量防护、异步通信、服务解耦等一系列核心问题。本篇博客将从零搭建一套轻量化完整微服务电商系统整合Spring Cloud Alibaba(NacosGatewaySentinel)、RabbitMQ、MySQL、Redis核心技术栈搭建用户服务、商品服务、订单服务三大核心微服务。完整实现服务注册发现、网关路由、动态配置、服务限流熔断、Feign远程调用、RabbitMQ异步消息通信、Redis缓存优化等核心能力全程拆解架构设计思路与开发流程文末提供完整可运行源码适合微服务入门实战与项目落地参考。二、项目整体架构介绍2.1 核心技术栈版本适配采用稳定企业级版本规避版本冲突问题适配主流开发环境Spring Boot2.7.14Spring Cloud2021.0.8Spring Cloud Alibaba2021.0.5.0Nacos2.2.3注册中心配置中心Sentinel流量限流、熔断降级、系统防护Spring Cloud Gateway统一网关、路由转发、请求拦截RabbitMQ消息队列、服务异步解耦、削峰填谷MySQL 8.0业务数据持久化Redis 6.0热点数据缓存、接口防重、流量缓冲OpenFeign服务间声明式远程调用Maven项目依赖管理2.2 微服务模块拆分基于单一职责原则拆分核心业务服务架构轻量化、易扩展gateway-server网关服务统一入口负责路由分发、负载均衡、请求过滤user-service用户服务处理用户注册、登录、信息查询、权限校验goods-service商品服务实现商品新增、查询、缓存、库存管理order-service订单服务核心业务服务创建订单、调用商品/用户服务、MQ异步通知2.3 核心架构流程1. 所有客户端请求统一经过Gateway网关完成路由转发与请求拦截2. 所有微服务注册到Nacos实现服务自动发现、健康检测、动态配置刷新3. 服务间通过OpenFeign实现同步远程调用Sentinel实时限流熔断防止服务雪崩4. 订单创建、消息通知等非实时业务通过RabbitMQ实现异步解耦、削峰填谷5. 商品、用户热点数据存入Redis减轻MySQL数据库压力提升接口响应速度6. Nacos配置中心统一管理所有服务配置支持动态修改、无需重启服务生效。三、环境准备与依赖搭建3.1 本地环境安装项目启动前需提前安装并启动以下中间件JDK 1.8、Maven 3.6Nacos 2.2.3单机启动默认端口8848RabbitMQ默认端口5672管理页面15672MySQL 8.0、Redis 6.03.2 父工程统一依赖管理创建Maven父工程统一锁定版本避免版本冲突核心pom依赖如下?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion groupIdcom.microservice/groupId artifactIdsca-rabbitmq-demo/artifactId version1.0.0/version packagingpom/packaging nameSCARabbitMQ微服务实战项目/name !-- 版本统一锁定 -- properties spring.boot.version2.7.14/spring.boot.version spring.cloud.version2021.0.8/spring.cloud.version spring.cloud.alibaba.version2021.0.5.0/spring.cloud.alibaba.version maven.compiler.source8/maven.compiler.source maven.compiler.target8/maven.compiler.target /properties dependencyManagement dependencies !-- Spring Boot 依赖 -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-dependencies/artifactId version${spring.boot.version}/version typepom/type scopeimport/scope /dependency !-- Spring Cloud 依赖 -- dependency groupIdorg.springframework.cloud/groupId artifactIdspring-cloud-dependencies/artifactId version${spring.cloud.version}/version typepom/type scopeimport/scope /dependency !-- Spring Cloud Alibaba 依赖 -- dependency groupIdcom.alibaba.cloud/groupId artifactIdspring-cloud-alibaba-dependencies/artifactId version${spring.cloud.alibaba.version}/version typepom/type scopeimport/scope /dependency /dependencies /dependencyManagement modules modulegateway-server/module moduleuser-service/module modulegoods-service/module moduleorder-service/module /modules /project四、核心组件功能实现4.1 Nacos 注册中心配置中心整合Nacos同时承担服务注册发现、统一配置管理两大核心功能支持服务健康检测、配置动态刷新无需重启服务即可更新配置。所有业务服务统一引入Nacos依赖!-- Nacos注册中心 -- dependency groupIdcom.alibaba.cloud/groupId artifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId /dependency !-- Nacos配置中心 -- dependency groupIdcom.alibaba.cloud/groupId artifactIdspring-cloud-starter-alibaba-nacos-config/artifactId /dependency服务启动类添加注册注解SpringBootApplication EnableDiscoveryClient // 开启Nacos服务注册发现 public class OrderApplication { public static void main(String[] args) { SpringApplication.run(OrderApplication.class, args); } }配置文件开启动态配置刷新spring: cloud: nacos: discovery: server-addr: 127.0.0.1:8848 config: server-addr: 127.0.0.1:8848 file-extension: yamlGateway作为系统统一入口实现路由转发、负载均衡、统一拦截替代传统Zuul网关性能更优、响应更快。核心路由配置spring: cloud: gateway: routes: # 用户服务路由 - id: user-service-route uri: lb://user-service predicates: - Path/user/** # 商品服务路由 - id: goods-service-route uri: lb://goods-service predicates: - Path/goods/** # 订单服务路由 - id: order-service-route uri: lb://order-service predicates: - Path/order/**4.3 Sentinel 限流熔断实现整合Sentinel实现接口限流、服务熔断、降级兜底解决微服务调用链雪崩问题保障系统高可用。1. 引入Sentinel依赖dependency groupIdcom.alibaba.cloud/groupId artifactIdspring-cloud-starter-alibaba-sentinel/artifactId /dependency2. 开启熔断降级注解自定义兜底方法Service public class OrderServiceImpl implements OrderService { Autowired private GoodsFeignClient goodsFeignClient; // 熔断降级调用商品服务异常时触发兜底方法 SentinelResource(value createOrder, blockHandler createOrderFallback) Override public String createOrder(Long goodsId) { // 远程调用商品服务查询库存 String goodsInfo goodsFeignClient.getGoodsInfo(goodsId); return 订单创建成功商品信息 goodsInfo; } // 兜底降级方法 public String createOrderFallback(Long goodsId, BlockException e) { return 系统繁忙订单创建失败请稍后重试; } }4.4 RabbitMQ 异步消息通信实现微服务同步调用存在耦合度高、响应慢、容错差的问题通过RabbitMQ实现订单创建异步通知、业务解耦、流量削峰。本次实现核心场景订单创建成功后异步发送消息通知用户。1. 引入RabbitMQ依赖dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-amqp/artifactId /dependency2. MQ队列、交换机绑定配置Configuration public class RabbitMQConfig { // 订单消息队列 public static final String ORDER_QUEUE order_queue; // 订单交换机 public static final String ORDER_EXCHANGE order_exchange; // 声明队列 Bean public Queue orderQueue() { return QueueBuilder.durable(ORDER_QUEUE).build(); } // 声明交换机 Bean public DirectExchange orderExchange() { return ExchangeBuilder.directExchange(ORDER_EXCHANGE).durable(true).build(); } // 绑定队列和交换机 Bean public Binding orderBinding(Queue orderQueue, DirectExchange orderExchange) { return BindingBuilder.bind(orderQueue).to(orderExchange).with(order.routing.key); } }3. 消息生产者订单服务发送消息Service public class OrderServiceImpl implements OrderService { Autowired private RabbitTemplate rabbitTemplate; Override public void sendOrderMsg(String orderNo) { // 发送订单消息 rabbitTemplate.convertAndSend(RabbitMQConfig.ORDER_EXCHANGE, order.routing.key, 订单【 orderNo 】创建成功请注意查收); } }4. 消息消费者监听队列接收消息并处理Component public class OrderMsgConsumer { // 监听订单队列消息 RabbitListener(queues RabbitMQConfig.ORDER_QUEUE) public void receiveOrderMsg(String msg) { System.out.println(接收订单通知消息 msg); // 可扩展短信通知、邮件通知、日志记录等业务 } }4.5 Redis缓存优化针对商品详情、用户信息等高频查询接口引入Redis缓存减少MySQL查询压力大幅提升接口响应速度。核心缓存业务代码Service public class GoodsServiceImpl implements GoodsService { Autowired private RedisTemplateString, Object redisTemplate; Autowired private GoodsMapper goodsMapper; Override public Goods getGoodsById(Long id) { // 1. 先查询缓存 String key goods: id; Goods goods (Goods) redisTemplate.opsForValue().get(key); if (goods ! null) { return goods; } // 2. 缓存不存在查询数据库 goods goodsMapper.selectById(id); // 3. 存入缓存设置过期时间 if (goods ! null) { redisTemplate.opsForValue().set(key, goods, 30, TimeUnit.MINUTES); } return goods; } }4.6 OpenFeign 服务远程调用实现订单服务调用用户服务、商品服务的声明式远程调用简化微服务间通信代码。// 商品服务远程调用接口 FeignClient(goods-service) public interface GoodsFeignClient { GetMapping(/goods/info/{id}) String getGoodsInfo(PathVariable(id) Long id); }五、数据库设计搭建三张核心业务表分别对应用户、商品、订单业务SQL脚本可直接导入MySQL执行-- 用户表 CREATE TABLE user ( id bigint NOT NULL AUTO_INCREMENT COMMENT 用户ID, username varchar(50) NOT NULL COMMENT 用户名, password varchar(100) NOT NULL COMMENT 密码, phone varchar(20) DEFAULT NULL COMMENT 手机号, create_time datetime DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间, PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT用户表; -- 商品表 CREATE TABLE goods ( id bigint NOT NULL AUTO_INCREMENT COMMENT 商品ID, goods_name varchar(100) NOT NULL COMMENT 商品名称, price decimal(10,2) NOT NULL COMMENT 商品价格, stock int NOT NULL DEFAULT 0 COMMENT 库存数量, create_time datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT商品表; -- 订单表 CREATE TABLE order ( id bigint NOT NULL AUTO_INCREMENT COMMENT 订单ID, order_no varchar(32) NOT NULL COMMENT 订单编号, user_id bigint NOT NULL COMMENT 用户ID, goods_id bigint NOT NULL COMMENT 商品ID, order_status tinyint DEFAULT 1 COMMENT 订单状态 1-待支付 2-已完成 3-已取消, create_time datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id), UNIQUE KEY uk_order_no (order_no) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT订单表;六、项目启动与功能测试6.1 启动顺序1. 启动Nacos、RabbitMQ、MySQL、Redis中间件2. 启动网关服务 gateway-server3. 依次启动 user-service、goods-service、order-service4. 查看Nacos服务列表确认所有服务注册成功。6.2 核心功能验证网关路由通过网关端口访问各服务接口路由转发正常服务调用订单服务可正常调用商品、用户服务接口MQ异步通信创建订单后消费者正常接收消息并打印日志限流熔断高频请求接口Sentinel触发限流兜底不报错不雪崩动态配置Nacos修改配置服务无需重启自动刷新缓存优化商品接口首次查询走数据库后续查询走Redis缓存。七、微服务架构核心亮点总结高可用架构Nacos实现服务注册容错Sentinel限流熔断杜绝服务雪崩保障系统稳定运行服务解耦通过RabbitMQ实现异步通信剥离非核心同步流程提升接口响应速度高性能优化Redis缓存热点数据网关统一负载均衡大幅降低数据库压力可运维性强Nacos动态配置无需重启服务更新配置适配线上迭代轻量化易扩展模块拆分清晰可快速扩展支付、库存、秒杀等衍生服务。八、结尾本篇博客从零搭建了一套基于Spring Cloud Alibaba RabbitMQ的完整微服务系统覆盖了微服务开发中服务注册、网关路由、动态配置、限流熔断、远程调用、异步消息、缓存优化等核心知识点贴合企业实际开发场景。后续将持续更新微服务进阶内容包括分布式事务、链路追踪、服务监控、Docker容器化部署等实战教程欢迎点赞、收藏、关注一起进阶微服务开发
RELATED

相关推荐

铁轨缺陷检测数据集详解:VOC+YOLO格式4020张4类别训练实践

铁轨缺陷检测数据集详解:VOC+YOLO格式4020张4类别训练实践

简介:面向铁轨表面缺陷检测的目标检测数据集,包含4020张jpg原图,并同时提供Pascal VOC格式的xml与YOLO格式的txt标注文件,覆盖波纹、剥落、鞍型、轮轨烧伤4个类别,共7155个矩形框,可直接用于YOLO等主流模型…

📅 2026/9/8 19:13:21
低成本具身RL实践:Apple Silicon上microduck-lab静态评测

低成本具身RL实践:Apple Silicon上microduck-lab静态评测

1. 静态评测到底评什么:不跑硬件也能看清一个具身RL项目 这两年具身智能的热度不用我多说,但真正动手做过机器人强化学习的人心里都清楚,这个领域有个让新人非常头疼的现状——钱和门槛把一大批想干活的人拦在了外面。一套标准四足机器人真机…

📅 2026/9/8 19:13:21
81-6S落地最难的不是标准,是人心!拆解钣金、机械工厂“四类”员工抵触破冰方法|杨逢昌

81-6S落地最难的不是标准,是人心!拆解钣金、机械工厂“四类”员工抵触破冰方法|杨逢昌

《6S管理实战专栏》 三环实战篇(第81篇) 杨逢昌使命: 用6S的力量,让10万名朋友实现高效愉悦的生活与工作。前言本文依托杨逢昌独创《6S 诊断・治疗・执行 三环体系》核心执行层逻辑,聚焦工厂6S落地最大卡点——员工心理…

📅 2026/9/8 19:13:20
MORE NEWS

更多资讯

📰

OpenHarmony上RN滚动冲突排查与解决:NestedScroll与手势机制实践

去年年底把一个 React Native 的新版本跑上 OpenHarmony 真机时,第一个让我加班到凌晨的问题不是环境配置,也不是包体积,而是页面上那个看似人畜无害的 NestedScroll 滚动冲突。外层 ScrollView 里套一个 FlatList,手指往上滑&…

📰

Phase {PHASE_NUMBER} Learnings: {PHASE_NAME}

Phase {PHASE_NUMBER} Learnings: {PHASE_NAME} 【免费下载链接】get-shit-done A light-weight and powerful meta-prompting, context engineering and spec-driven development system for Claude Code by TCHES. 项目地址: https://gitcode.com/GitHub_Trending/getshi/g…

📰

CATLASS × AscendC 算子调测 API:两行代码看清 kernel 内部

CATLASS AscendC 算子调测 API:两行代码看清 kernel 内部 【免费下载链接】pot-desktop 🌈一个跨平台的划词翻译和OCR软件 | A cross-platform software for text translation and recognition. 项目地址: https://gitcode.com/GitHub_Trending/po/po…

📰

Compose Multiplatform Web 字体渲染避坑全解析:三步修复 FontVariation 可变字体失效

Compose Multiplatform Web 字体渲染避坑全解析:三步修复 FontVariation 可变字体失效 【免费下载链接】compose-multiplatform Compose Multiplatform, a modern UI framework for Kotlin that makes building performant and beautiful user interfaces easy and …

📰

一次跑通 PianoPlayer 测试套件:指法生成到底可信吗

一次跑通 PianoPlayer 测试套件:指法生成到底可信吗 【免费下载链接】taipy Turns Data and AI algorithms into production-ready web applications in no time. 项目地址: https://gitcode.com/GitHub_Trending/ta/taipy PianoPlayer 会把乐谱里每个音符配…

📰

res-downloader 零门槛上手指南:3 条工作流搞定资源嗅探、视频下载与图片批量下载

res-downloader 零门槛上手指南:3 条工作流搞定资源嗅探、视频下载与图片批量下载 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬