news 2026/6/13 4:39:59

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
手把手教你用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在微服务开发中的基础应用。虽然示例简单,但它包含了微服务架构的核心概念:服务拆分、独立部署和跨服务调用。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/13 4:38:53

数据科学问题为何没有唯一解?四维决策框架实战指南

1. 这句话不是哲学感慨&#xff0c;而是每个数据科学从业者每天都在面对的现实“The Solution to a Data Science Problem is not Unique”——这句话乍看像一句教科书里的冷知识&#xff0c;但在我带过27个企业级数据项目、审阅过400份算法方案、亲手重构过13套线上模型 pipel…

作者头像 李华
网站建设 2026/6/13 4:31:12

告别Navicat!我用DataGrip管理MySQL和PostgreSQL的3个高效工作流

告别Navicat&#xff01;我用DataGrip管理MySQL和PostgreSQL的3个高效工作流第一次打开DataGrip时&#xff0c;那种流畅的键盘操作体验让我想起了Vim——这个工具似乎天生就是为键盘党设计的。作为长期使用Navicat的开发者&#xff0c;我从未想过数据库工具可以如此深度融入开发…

作者头像 李华
网站建设 2026/6/13 4:28:52

从原理图到驱动代码:MTK DWS中GPIO配置的完整工作流解析

从原理图到驱动代码&#xff1a;MTK DWS中GPIO配置的完整工作流解析在嵌入式系统开发中&#xff0c;GPIO&#xff08;通用输入输出&#xff09;是最基础也是最常用的外设接口之一。无论是控制一个LED灯的亮灭&#xff0c;还是读取按键的状态&#xff0c;都离不开对GPIO的正确配…

作者头像 李华
网站建设 2026/6/13 4:25:54

智能体对话协议设计:从FIPA到大模型时代的工程决策指南

1. 项目概述&#xff1a;当“对话”成为智能体的底层语言“Designing Agent Conversations: From FIPA to Today’s Protocols”——这个标题乍看像一篇学术综述&#xff0c;但在我过去十年带团队落地二十多个多智能体系统&#xff08;MAS&#xff09;项目的实操经验里&#xf…

作者头像 李华
网站建设 2026/6/13 4:17:04

图核机与随机特征方法在大规模图表示学习中的应用

1. 图核机与节点嵌入概述图核机&#xff08;Graph Kernel Machines&#xff09;是现代图表示学习中的核心工具&#xff0c;它通过将图节点映射到低维欧几里得空间&#xff0c;同时保留原始图的结构信息。这种技术已成为节点分类、链接预测和信号重建等任务的基础方法。其核心思…

作者头像 李华