9.6、Feign与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 请求
多实例调用
多实例部署
多实例部署:
- 启动多个 user-service 实例
- 注册到 Nacos
- Feign 自动发现所有实例
- 根据策略选择实例
实例选择
@FeignClient(name = "user-service") public interface UserServiceClient { @GetMapping("/api/users/{id}") User getUser(@PathVariable Long id); }
负载均衡策略
spring: cloud: loadbalancer: configurations: round-robin
负载均衡验证
验证步骤
验证步骤:
- 启动多个服务实例
- 多次调用 Feign 接口
- 观察请求分发情况
- 验证负载均衡效果
测试代码
@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() { // 自定义负载均衡器 } }
工作原理
请求流程
请求流程:
- Feign 客户端发起请求
- LoadBalancerInterceptor 拦截请求
- 从服务名解析服务实例列表
- 根据负载均衡策略选择实例
- 替换服务名为实际 IP:Port
- 执行 HTTP 请求
服务发现
服务发现:
- 从 Nacos 获取服务实例列表
- 缓存服务实例列表
- 监听服务变更
- 自动更新实例列表
官方资源
- Spring Cloud OpenFeign 官方文档:https://spring.io/projects/spring-cloud-openfeign
- Spring Cloud LoadBalancer 官方文档:https://spring.io/projects/spring-cloud-loadbalancer
本节小结
在本节中,我们学习了:
第一个是自动负载均衡。 Feign 自动集成 LoadBalancer。
第二个是服务发现集成。 Feign 与 Nacos 服务发现集成。
第三个是多实例调用。 如何调用多个服务实例。
第四个是负载均衡验证。 如何验证负载均衡效果。
这就是 Feign 与 LoadBalancer 集成。Feign 自动集成 LoadBalancer,实现服务调用的负载均衡。
在下一节,我们将学习 Feign 与 Sentinel 集成。