当前位置: 首页 > news >正文

手把手教你用SpringCloudAlibaba快速搭建一个订单-库存微服务Demo(含完整代码)

手把手教你用SpringCloudAlibaba快速搭建一个订单-库存微服务Demo(含完整代码)

微服务架构已经成为现代分布式系统开发的主流范式,而SpringCloudAlibaba作为SpringCloud的增强版,为开发者提供了一站式的微服务解决方案。本文将通过一个电商场景下的订单-库存服务交互案例,带你从零开始构建两个独立的Spring Boot微服务,并实现它们之间的HTTP通信。

1. 环境准备与项目初始化

在开始之前,确保你的开发环境满足以下要求:

  • JDK 1.8或更高版本
  • Maven 3.6.0或更高版本
  • IntelliJ IDEA(推荐)或其他Java IDE

我们将采用Maven多模块项目结构,创建一个父工程和两个子模块(order-service和stock-service)。父工程的pom.xml文件需要包含Spring Boot、Spring Cloud和SpringCloudAlibaba的依赖管理:

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>springcloud-alibaba-demo</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>pom</packaging> <modules> <module>order-service</module> <module>stock-service</module> </modules> <properties> <java.version>1.8</java.version> <spring-boot.version>2.7.7</spring-boot.version> <spring-cloud.version>2021.0.5</spring-cloud.version> <spring-cloud-alibaba.version>2021.0.5.0</spring-cloud-alibaba.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>${spring-cloud-alibaba.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> </project>

2. 订单服务实现

订单服务(order-service)负责处理用户下单请求,并在下单成功后调用库存服务进行库存扣减。首先创建order-service模块的pom.xml:

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.example</groupId> <artifactId>springcloud-alibaba-demo</artifactId> <version>1.0.0-SNAPSHOT</version> </parent> <artifactId>order-service</artifactId> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> </project>

接下来实现订单服务的核心代码。首先创建启动类:

package com.example.order; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; import org.springframework.web.client.RestTemplate; @SpringBootApplication public class OrderApplication { public static void main(String[] args) { SpringApplication.run(OrderApplication.class, args); } @Bean public RestTemplate restTemplate() { return new RestTemplate(); } }

然后创建订单控制器,处理下单请求并调用库存服务:

package com.example.order.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; @RestController @RequestMapping("/orders") public class OrderController { @Autowired private RestTemplate restTemplate; @PostMapping public String createOrder() { // 模拟下单逻辑 System.out.println("创建订单成功"); // 调用库存服务扣减库存 String result = restTemplate.postForObject( "http://localhost:8081/stocks/reduce", null, String.class ); return "订单创建成功,库存服务返回:" + result; } }

配置application.yml文件:

server: port: 8080 spring: application: name: order-service

3. 库存服务实现

库存服务(stock-service)负责处理库存扣减请求。创建stock-service模块的pom.xml:

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.example</groupId> <artifactId>springcloud-alibaba-demo</artifactId> <version>1.0.0-SNAPSHOT</version> </parent> <artifactId>stock-service</artifactId> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> </project>

实现库存服务的启动类:

package com.example.stock; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class StockApplication { public static void main(String[] args) { SpringApplication.run(StockApplication.class, args); } }

创建库存控制器,处理库存扣减请求:

package com.example.stock.controller; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/stocks") public class StockController { @PostMapping("/reduce") public String reduceStock() { // 模拟库存扣减逻辑 System.out.println("库存扣减成功"); return "库存已扣减"; } }

配置application.yml文件:

server: port: 8081 spring: application: name: stock-service

4. 服务测试与验证

现在我们已经完成了两个微服务的开发,接下来进行测试验证:

  1. 首先启动stock-service,确保它在8081端口正常运行
  2. 然后启动order-service,确保它在8080端口正常运行
  3. 使用Postman或curl测试订单创建接口:
curl -X POST http://localhost:8080/orders

预期返回结果:

订单创建成功,库存服务返回:库存已扣减

同时查看两个服务的控制台输出,应该能看到:

  • order-service输出:"创建订单成功"
  • stock-service输出:"库存扣减成功"

5. 项目优化与扩展建议

虽然我们已经实现了基本的微服务通信,但在实际生产环境中还需要考虑以下方面:

  1. 服务发现与注册:目前我们使用硬编码的URL调用库存服务(http://localhost:8081),这在服务实例动态变化的环境中不可行。可以引入Nacos作为服务注册中心:
<!-- 在order-service和stock-service的pom.xml中添加 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
  1. 负载均衡:当有多个库存服务实例时,需要实现负载均衡。Spring Cloud提供了Ribbon和LoadBalancer:
// 修改RestTemplate配置 @Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); } // 修改调用方式 String result = restTemplate.postForObject( "http://stock-service/stocks/reduce", null, String.class );
  1. 容错处理:当库存服务不可用时,需要添加容错机制。可以使用Spring Cloud Alibaba Sentinel:
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency>
  1. API文档:为微服务接口生成文档,可以使用SpringDoc OpenAPI:
<dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-ui</artifactId> <version>1.6.9</version> </dependency>
  1. 配置中心:将配置外部化,可以使用Nacos Config:
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>

通过这个简单的订单-库存微服务Demo,我们展示了SpringCloudAlibaba在微服务开发中的基础应用。虽然示例简单,但它包含了微服务架构的核心概念:服务拆分、独立部署和跨服务调用。

http://www.jsqmd.com/news/1003196/

相关文章:

  • Blender 3MF插件:从3D设计到3D打印的终极桥梁
  • 2026年碳素管/碳素螺旋管供应厂家市场测评报告 - 品牌发掘
  • 2026年天津家电维修实力对比 5家各具特色靠谱推荐 - 本地品牌推荐
  • 淮南择校必看!本地家长认可的优质热门公办职业院校推荐,中专学校/新能源汽车专业学校/技工学校/中职学校,职业学校推荐 - 品牌推荐师
  • 2026年山特UPS电源供应商综合能力评估:行业头部企业横向对比与案例解析 - 优质品牌商家
  • 2026年广州走廊地毯采购指南:品牌对比与行业趋势分析 - 优质品牌商家
  • 2026年质量好的东莞企业注册代办/东莞无地址注册公司代办/东莞公司注册代办/东莞营业执照代办客户信赖公司 - 行业平台推荐
  • 离线动作VLA模型---OpenVLA算法原理详解
  • MobaXterm 隐藏玩法:用自定义快捷键打造你的专属终端武器库
  • 2026年不锈钢公交站台与智能垃圾房品牌选型指南:技术工艺、交付能力与区域服务深度解析 - 优质品牌商家
  • 外贸跟单/跨境电商卖家必看:如何用AQL 2.5标准跟工厂谈验货,避免货不对板?
  • AI 不可变基础设施与 GitOps 驱动的模型交付:OCI 制品、声明式推理与可复现训练环境深度解析
  • 2026年五恒系统公司怎么选?深度对比四家主流服务商的差异化优势与真实案例 - 优质品牌商家
  • MLOps实战:从数据版本到模型监控的端到端工程化落地
  • 2026年质量好的成都grg构件/成都grg吊顶推荐品牌厂家 - 品牌宣传支持者
  • IM6ULL芯片
  • 2026年TC4钛饼选材指南:行业格局、关键参数与供应商能力解析 - 优质品牌商家
  • 2026年比较好的钢结构厂房/钢结构桥梁实力公司推荐 - 品牌宣传支持者
  • CLion 2025.1.1 非商业免费版 介绍与完整部署教程
  • 大模型对齐与价值观安全深度解析:从RLHF到Constitutional AI的可扩展对齐攻防实战
  • 从性能故障到安全风险,现代企业数字化转型下的网络丢包运维管控指南
  • AI写教材工具实测:低查重产出,快速生成高质量教材书稿!
  • 别再手动拼接了!Python处理JSONL文件转JSON的3种实用方法(附完整代码)
  • Sqribble文档自动化:面向内容结构的确定性排版系统
  • 2026年上海劳动纠纷律师哪家好?5位实战派律师详细推荐 冯婉律师值得信赖 - 本地品牌推荐
  • 记录Linux(wait和waitpid函数)
  • 多维聚合实战:超越GROUP BY的数据操作框架
  • 如何快速掌握APA第7版格式规范:面向学术写作新手的完整教程
  • 小红书数据采集架构深度解析:5大高性能设计策略与企业级实战指南
  • Towards AI:O‘Reilly的工程化AI知识实时出版范式