Skip to content

xiaoli79/spring_cloud_feign

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Spring Cloud Feign 微服务项目学习笔记

本项目是一个基于 Spring Cloud 的微服务学习项目,主要演示了如何使用 Spring Cloud Feign 实现服务间的声明式 REST 调用。项目包含三个模块:order-service(订单服务)、product-service(商品服务)和 product-api(商品服务接口)。

目录

项目概述

本项目通过模拟电商场景中的订单和商品两个核心服务,展示了微服务架构下服务之间如何进行高效、解耦的通信。order-service 在处理订单时,需要查询 product-service 获取商品信息。这个过程通过 Spring Cloud Feign 实现,避免了使用传统的 RestTemplate 硬编码服务地址,使代码更简洁、易于维护。

技术栈

  • 核心框架: Spring Boot 3.1.6
  • 微服务框架: Spring Cloud 2022.0.3
  • 服务治理: Spring Cloud Alibaba Nacos 2022.0.0.0-RC2 (用于服务注册、发现和配置管理)
  • 声明式 REST 客户端: Spring Cloud OpenFeign
  • ORM: MyBatis
  • 数据库: MySQL
  • 构建工具: Maven
  • 开发环境: JDK 17

模块介绍

product-api

product-api 模块是商品服务的接口定义模块,它包含了 ProductInfo 模型和 ProductApi 接口。这个模块被 order-serviceproduct-service 共同依赖,实现了服务接口与实现的分离,是 Feign 实现声明式调用的基础。

主要内容:

  • ProductInfo.java: 商品信息的数据模型。
  • ProductApi.java: 定义了商品服务的相关接口,如根据商品 ID 获取商品信息。

product-service

product-service 是商品服务的提供者,它实现了 product-api 中定义的接口。该服务启动后会将自己注册到 Nacos 服务中心。

主要功能:

  • ProductController.java: 实现了 ProductApi 接口,提供了查询商品信息的 HTTP 端点。
  • ProductService.javaProductMapper.java: 负责处理业务逻辑和数据库操作。
  • application.yml: 配置了服务名称 product-service、端口号以及 Nacos 注册中心地址。

order-service

order-service 是订单服务,是服务消费者。它通过 Feign 客户端调用 product-service 提供的接口来获取商品信息。

主要功能:

  • OrderController.java: 提供查询订单信息的接口。在查询订单时,会调用 OrderService 获取完整的订单信息(包含商品信息)。
  • OrderService.java: 核心业务逻辑。它通过注入的 ProductApi Feign 客户端来远程调用 product-service 的接口。
  • ProductApi.java (in order-service): 这是一个继承了 product-api 模块中 ProductApi 接口的 Feign 客户端接口。通过 @FeignClient 注解指定了要调用的服务名称 (product-service)。
  • OrderServiceApplication.java: 启动类上添加了 @EnableFeignClients 注解,以启用 Feign 功能。

核心功能

服务注册与发现

  • Nacos Discovery: order-serviceproduct-service 都引入了 spring-cloud-starter-alibaba-nacos-discovery 依赖,并在配置文件中指定了 Nacos 服务器地址,从而实现了服务的自动注册和发现。

声明式服务调用

  • OpenFeign: order-service 通过 @FeignClient 注解定义了一个 ProductApi 接口的实现,该接口的代理类由 Feign 自动创建。当调用这个接口的方法时,Feign 会自动构造 HTTP 请求,并发送到 Nacos 中注册的 product-service 实例。这种方式使得远程调用像调用本地方法一样简单。

负载均衡

  • Spring Cloud LoadBalancer: Feign 内部集成了负载均衡器。当 product-service 有多个实例时,order-service 发出的请求会通过 Spring Cloud LoadBalancer 自动地以轮询等策略分发到不同的实例上,提高了系统的可用性和伸缩性。在配置文件中通过 spring.cloud.loadbalancer.nacos.enabled: true 开启对 Nacos 的负载均衡支持。

配置说明

  • pom.xml:
    • pom.xml 文件中通过 dependencyManagement 统一管理了 Spring Cloud 和 Spring Cloud Alibaba 的版本,确保了版本兼容性。
    • order-service 引入了 spring-cloud-starter-openfeignproduct-api 的依赖。
    • product-service 也引入了 product-api 依赖。
  • application.yml:
    • 各个服务通过 spring.application.name 来命名,这是服务注册到 Nacos 的唯一标识。
    • 通过 spring.cloud.nacos.discovery.server-addr 配置 Nacos 服务器地址。
  • 多环境配置:
    • 项目使用了 devprod 两种环境配置,通过 Maven Profiles (<profile.name>) 进行切换,实现了不同环境的数据库和 Nacos 地址的隔离。

使用方法

  1. 环境准备:
    • 启动 Nacos Server。
    • 启动 MySQL 数据库,并创建相应的数据库和表 (cloud_ordercloud_product)。
  2. 修改配置:
    • order-serviceproduct-serviceapplication-dev.yml (或 prod) 文件中,修改数据库和 Nacos 的连接信息。
  3. 启动服务:
    • 依次启动 product-serviceorder-service
  4. 接口测试:
    • 访问 order-service 提供的接口(如 http://localhost:8080/order/{orderId}),即可看到订单信息以及通过 Feign 调用 product-service 获取到的商品信息。

About

Spring Cloud Feign 微服务项目学习笔记

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages