9.6Feign与LoadBalancer集成

分类: Spring Cloud OpenFeign

Feign 与 LoadBalancer 集成

Feign 自动集成 LoadBalancer 实现负载均衡。本节将学习 Feign 与 LoadBalancer 集成。

本节将学习:自动负载均衡、服务发现集成、多实例调用,以及负载均衡验证。

自动负载均衡

自动集成

自动集成:

  • Feign 自动检测 LoadBalancer
  • 自动启用负载均衡
  • 无需额外配置
  • 支持多种负载均衡策略

依赖配置

<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId> </dependency>

服务发现集成

Nacos 集成

spring: application: name: order-service cloud: nacos: discovery: server-addr: localhost:8848

Feign 客户端

@FeignClient(name = "user-service") public interface UserServiceClient { @GetMapping("/api/users/{id}") User getUser(@PathVariable Long id); }

服务名解析

服务名解析:

  • user-service → 从 Nacos 获取服务实例列表
  • 根据负载均衡策略选择实例
  • 替换服务名为实际 IP:Port
  • 执行 HTTP 请求

多实例调用

多实例部署

多实例部署:

  1. 启动多个 user-service 实例
  2. 注册到 Nacos
  3. Feign 自动发现所有实例
  4. 根据策略选择实例

实例选择

@FeignClient(name = "user-service") public interface UserServiceClient { @GetMapping("/api/users/{id}") User getUser(@PathVariable Long id); }

负载均衡策略

spring: cloud: loadbalancer: configurations: round-robin

负载均衡验证

验证步骤

验证步骤:

  1. 启动多个服务实例
  2. 多次调用 Feign 接口
  3. 观察请求分发情况
  4. 验证负载均衡效果

测试代码

@RestController public class TestController { @Autowired private UserServiceClient userServiceClient; @GetMapping("/test") public String test() { for (int i = 0; i < 10; i++) { User user = userServiceClient.getUser(1L); System.out.println("Response from: " + user); } return "Test completed"; } }

日志验证

@RestController public class UserController { @Value("${server.port}") private String port; @GetMapping("/api/users/{id}") public User getUser(@PathVariable Long id) { System.out.println("Request received on port: " + port); return new User(id, "User " + id); } }

配置负载均衡策略

全局配置

spring: cloud: loadbalancer: configurations: round-robin

服务级配置

spring: cloud: loadbalancer: configurations: user-service: round-robin product-service: random

编程式配置

@Configuration public class LoadBalancerConfig { @Bean @LoadBalancerClient(name = "user-service", configuration = CustomLoadBalancerConfig.class) public ReactorLoadBalancer<ServiceInstance> customLoadBalancer() { // 自定义负载均衡器 } }

工作原理

请求流程

请求流程:

  1. Feign 客户端发起请求
  2. LoadBalancerInterceptor 拦截请求
  3. 从服务名解析服务实例列表
  4. 根据负载均衡策略选择实例
  5. 替换服务名为实际 IP:Port
  6. 执行 HTTP 请求

服务发现

服务发现:

  • 从 Nacos 获取服务实例列表
  • 缓存服务实例列表
  • 监听服务变更
  • 自动更新实例列表

官方资源

本节小结

在本节中,我们学习了:

第一个是自动负载均衡。 Feign 自动集成 LoadBalancer。

第二个是服务发现集成。 Feign 与 Nacos 服务发现集成。

第三个是多实例调用。 如何调用多个服务实例。

第四个是负载均衡验证。 如何验证负载均衡效果。

这就是 Feign 与 LoadBalancer 集成。Feign 自动集成 LoadBalancer,实现服务调用的负载均衡。

在下一节,我们将学习 Feign 与 Sentinel 集成。