Spring Cloud从零开始:微服务入门指南

编程.何红.法师
2025-06-15 18:01
阅读 665

开篇:Spring Cloud是什么?它用来做什么?

开篇:Spring Cloud是什么?它用来做什么?

想象一下,你正在开发一个大型电商系统,里面包括了用户注册、商品管理、订单处理等多个功能模块。如果把所有这些功能都写在一个项目里,将来会变得非常庞大和难以维护。

Spring Cloud 就是来解决这个问题的工具集,它帮助我们将大型项目拆分成多个独立运行的小程序(我们叫它们“微服务”),每个小程序只负责自己的那一部分业务,比如一个负责登录注册,一个负责购物车等等。

这些小服务之间可以互相通信,并且可以独立部署、更新和扩展,这样整个系统的灵活性就大大提高了。


环境准备:搭建开发环境

系统架构设计图-1

环境准备:搭建开发环境

在开始写代码之前,我们需要准备好以下开发环境:

1. 安装JDK 8 或更高版本

你可以访问 Oracle官网 下载并安装JDK。

验证安装是否成功,打开终端或命令行,输入:

java -version

2. 安装IDE(推荐IntelliJ IDEA)

下载地址:JetBrains IntelliJ IDEA

安装完成后,启动IDEA。

3. 安装Maven

Maven是一个项目构建工具。你可以通过下面的命令查看是否已安装:

mvn -version

如果没有安装,请参考Maven官方文档进行安装。


核心概念:初识微服务与Spring Cloud组件

为了方便理解,我们先介绍几个最基础的概念:

1. 什么是微服务?

  • 微服务就是把大应用拆成多个小服务。
  • 每个小服务都可以单独运行、部署和升级。
  • 比如说:一个商城项目可以分为用户服务、商品服务、订单服务等。

2. Spring Boot 和 Spring Cloud的关系?

  • Spring Boot:是用来快速搭建单个微服务项目的框架。
  • Spring Cloud:是一整套微服务解决方案,依赖于Spring Boot,提供服务发现、配置中心、网关等功能。

3. 微服务核心组件简介(新手友好版)

组件 功能简述
Eureka 服务发现。就像电话簿一样,其他服务可以通过Eureka知道你要联系哪个服务。
Ribbon 负载均衡。当有多个相同服务时,帮你选择一个最合适的来调用。
Feign 远程调用。让你像调用本地方法一样调用其他服务的方法。
Gateway API网关。相当于门卫,对外统一接口入口。

实战项目:创建你的第一个微服务系统

我们将创建一个简单的图书借阅系统,包含两个服务:

  • 用户服务(UserService):提供用户信息。
  • 借阅服务(BorrowService):调用用户服务获取用户信息。

第一步:创建父项目(使用Maven)

创建一个 pom.xml 文件作为项目根目录:

<project xmlns="http://maven.apache.org/POM/4.0.0" ...>
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>book-borrow-system</artifactId>
    <version>1.0.0</version>
    <modules>
        <module>user-service</module>
        <module>borrow-service</module>
    </modules>
    <packaging>pom</packaging>
    
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.5</version>
        <relativePath/>
    </parent>
</project>

第二步:创建用户服务(UserService)

创建一个子模块 user-service 并添加如下内容:

pom.xml 配置文件:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
</dependencies>

启动类 UserServiceApplication.java

@SpringBootApplication
public class UserServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(UserServiceApplication.class, args);
    }
}

控制器类 UserController.java

@RestController
@RequestMapping("/users")
public class UserController {

    @GetMapping("/{id}")
    public String getUserById(@PathVariable String id) {
        return "User ID: " + id + ", Name: 张三";
    }
}

application.yml 配置:

server:
  port: 8081

spring:
  application:
    name: user-service

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

第三步:创建借阅服务(BorrowService)

同样创建子模块 borrow-service,并在其中实现调用用户服务的功能。

控制器类 BorrowController.java

@RestController
@RequestMapping("/borrow")
public class BorrowController {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/user/{id}")
    public String getUserFromUserService(@PathVariable String id) {
        String url = "http://user-service/users/" + id;
        return restTemplate.getForObject(url, String.class);
    }
}

在启动类中注入RestTemplate:

@Bean
public RestTemplate restTemplate() {
    return new RestTemplate();
}

application.yml 配置:

server:
  port: 8082

spring:
  application:
    name: borrow-service

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

第四步:添加Eureka服务中心

创建一个新的Spring Boot项目,添加Eureka Server依赖,在启动类上加上:

@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

配置文件application.yml:

server:
  port: 8761

eureka:
  instance:
    hostname: localhost
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

常见问题:新手容易遇到的问题和解答

❓Q1:为什么我访问不到用户服务?

可能原因:

  • 用户服务没有注册到Eureka。
  • Eureka没有正常启动。
  • 接口路径写错了,记得检查路径拼接是否正确。

❓Q2:RestTemplate 报错 “No instances available for service...”

说明:BorrowService没有在Eureka中找到对应服务
请确认:

  • 用户服务已经成功注册。
  • 服务名称拼写一致(区分大小写!)
  • 是否忘记加 @LoadBalanced 注解到RestTemplate bean。

修复方法示例:

@Bean
@LoadBalanced
public RestTemplate restTemplate() {
    return new RestTemplate();
}

学习建议:下一步应该学什么?

恭喜你完成了第一个微服务项目!

接下来你可以继续学习以下进阶知识:

1. 使用Feign替代RestTemplate

让远程调用更简洁优雅,类似本地方法调用。

2. 加入配置中心(Spring Cloud Config)

统一管理不同微服务的配置文件。

3. 引入网关(Spring Cloud Gateway)

为所有服务设置统一的请求入口。

4. 探索熔断器Hystrix(了解服务降级)

提高系统的健壮性,防止服务崩溃影响全部系统。

5. 实践部署

尝试使用Docker打包你的服务,然后部署到服务器或云平台。


本教程旨在帮助完全零基础的新手,用通俗语言讲解微服务的核心理念和Spring Cloud的基础操作。希望你喜欢这篇文章,并愿意继续深入探索这一强大的技术体系!

评论 0

最热最新
暂无评论
匿名用户Lv.1
0
影响力
0
文章
0
粉丝