Spring Cloud Alibaba实战03|OpenFeign远程调用+LoadBalancer负载均衡
导语
整套SCA实战源码已开源到Gitee,直接克隆下载就能本地运行全部案例,不用额外改配置:
本章对应 module-feign-demo 模块,基于第一篇Nacos注册中心案例,手把手教大家实现微服务之间远程接口调用。本地完整实测,少量代码就能搞定服务调用和负载均衡,不管日常开发还是面试刷题都能用得上。
技术版本
- JDK 17
- Spring Boot 3.5.0
- Spring Cloud Alibaba 2025.0.0.0
- Nacos 3.0.3
高频面试对比:OpenFeign vs RestTemplate
面试经常被问微服务远程调用该怎么选,这里整理好核心区别,直接背就行:
| 对比维度 | RestTemplate | OpenFeign |
|---|---|---|
| 编码方式 | 手动拼接URL、参数,代码冗余 | 只用接口注解声明,写法和本地调用一模一样,代码极简 |
| 负载均衡 | 需要手动整合负载均衡组件 | 原生适配LoadBalancer,引入依赖自动生效 |
| 日志调试 | 需要自定义拦截器实现 | 一行配置开启完整调用日志,排错方便 |
| 工程适配 | 仅适合本地临时简单测试 | 企业微服务项目标准选型 |
面试小结:线上正式微服务项目统一用OpenFeign做远程调用,RestTemplate基本只用于本地临时测试。
模块核心功能
本模块上手就能跑,功能简单纯粹,没有多余内容:
-
当前服务自动注册到Nacos注册中心;
-
通过OpenFeign基于服务名远程调用
nacos-service-demo服务接口; -
结合LoadBalancer自带负载均衡,不用手动写死IP、端口。
当前服务端口:8082
运行前置条件:本地启动Nacos,提前跑通第一篇 module-nacos-demo(8081端口)。
一、完整 pom.xml 依赖
重点注意:新版本SCA必须手动加LoadBalancer依赖,少了直接启动报错。
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.xiaoyuancode</groupId>
<artifactId>sca-study-demo</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>module-feign-demo</artifactId>
<name>module-feign-demo</name>
<description>OpenFeign服务远程调用</description>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- Web基础依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 配置注解提示 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<!-- 新版必须手动引入负载均衡依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<!-- Nacos服务注册 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- OpenFeign核心依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
</project>
二、application.yml 核心配置
配置极简,只保留注册中心地址和Feign调试日志,够用不冗余。
server:
port: 8082
spring:
application:
name: feign-service-demo
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
# 开启Feign请求日志,排错调试必备
logging:
level:
com.xiaoyuancode.sca.feign: debug
三、核心Java源码
1. 启动类 FeignApplication.java
两个核心注解缺一不可,分别负责服务注册和开启Feign调用。
package com.xiaoyuancode.sca.feign;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
@SpringBootApplication
@EnableDiscoveryClient //注册到Nacos
@EnableFeignClients //开启Feign调用
public class FeignApplication {
public static void main(String[] args) {
SpringApplication.run(FeignApplication.class, args);
}
}
2. Feign远程调用接口 NacosServiceFeignClient.java
核心关键点:@FeignClient 的name 要和被调用服务的应用名完全一致,接口路径、请求方式必须完全对齐。
package com.xiaoyuancode.sca.feign.feign;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
@FeignClient(name="nacos-service-demo")
public interface NacosServiceFeignClient {
@GetMapping("/sca/nacos/register")
String callNacosRegister();
}
3. 测试接口 Controller
package com.xiaoyuancode.sca.feign.controller;
import com.xiaoyuancode.sca.feign.feign.NacosServiceFeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/sca/feign")
public class FeignTestController {
private final NacosServiceFeignClient feignClient;
public FeignTestController(NacosServiceFeignClient feignClient) {
this.feignClient = feignClient;
}
@GetMapping("/test")
public String testFeign(){
return "Feign 调用成功 ===>" + feignClient.callNacosRegister();
}
}
四、本地启动步骤
-
启动本地Nacos,确保控制台正常访问;
-
先启动第一篇的
module-nacos-demo服务,保证服务注册进Nacos; -
运行当前模块启动类,服务启动端口8082;
-
执行curl命令测试远程调用效果。
五、接口测试命令
Windows10/Win11自带curl可直接复制命令;Win7 / 旧版Windows可直接浏览器访问对应地址查看结果。
curl http://localhost:8082/sca/feign/test

六、实操踩坑总结
-
启动报错缺失负载均衡:Spring Cloud 2025.0.0彻底取消了内置负载均衡依赖,不手动引入
spring-cloud-starter-loadbalancer,启动直接抛Feign负载均衡异常,这是新手最容易踩的坑。 -
Feign调用404 :大概率两个问题,一是Feign接口路径、请求方式和目标服务不匹配,二是
@FeignClient配置的服务名和Nacos注册的服务名不一致。 -
控制台看不到Feign请求日志 :yml中的日志包路径必须和自己的Feign代码包路径完全对应,级别设置为debug才能打印完整调用日志,方便排查接口问题。
小结
整篇都是落地实操,没有空洞理论,只用少量代码实现微服务核心的远程调用+负载均衡能力。OpenFeign注解化的写法大幅简化微服务调用代码,也是企业开发的标准写法,文中代码可以直接搬到自己项目中使用。
下一章预告:Spring Cloud Alibaba实战04|API网关Gateway:路由转发、统一跨域、请求拦截

浙公网安备 33010602011771号