<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>2.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.2.3.RELEASE</version>
</dependency>
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class ExampleApplication {
public static void main(String[] args) {
SpringApplication.run(ExampleApplication.class, args);
}
}
yam配置
spring.application.name=example-consumer
# 配置 Eureka 地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka
# 配置 Feign 负载均衡策略
# 可选的策略包括:随机(Random)、轮询(RoundRobin)和最小活跃数(LeastActive)
example.feign.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RoundRobinRule
代码实现
@FeignClient(name = "example-provider", fallback = ExampleFeignFallback.class)
public interface ExampleFeignClient {
@GetMapping("/provider")
String provider();
}
@Component
public class ExampleFeignFallback implements ExampleFeignClient {
@Override
public String provider() {
return "fallback";
}
}
当服务调用失败时,会使用 fallback 类中的方法返回默认值
Feign 是一个基于 HTTP 的 RESTful 服务客户端,它的负载均衡主要通过 Ribbon 来实现。
Ribbon 是 Netflix 开源的一个负载均衡组件,主要用于处理服务消费者和服务提供者之间的负载均衡。Ribbon 支持多种负载均衡策略,常用的负载均衡策略包括:
随机策略(RandomRule)
随机选择一个可用的服务实例进行访问。
轮询策略(RoundRobinRule)
按顺序选择一个可用的服务实例进行访问,如果选择的服务实例出现故障,则跳过该实例并继续选择下一个实例。
最少连接策略(WeightedResponseTimeRule)
在轮询的基础上,加入每个服务实例的权重,根据权重计算出实例的响应时间,响应时间越短的实例被选中的概率越大,从而优化了负载均衡的效果。
一致性Hash策略(ConsistentHashRule)
根据请求的哈希值来选择服务实例。这种策略保证同一个请求的地址一定会被路由到同一个服务实例上,适用于一些有状态的服务场景。
Ribbon 的原理实际上很简单,主要是通过向服务注册中心(如 Eureka)获取可用的服务实例列表,然后基于配置的负载均衡策略选择一个服务实例进行访问。Ribbon 还提供了多种配置项,可以优化负载均衡的效果。
总之,Ribbon 的负载均衡策略实现简单、易于扩展,并且能够提高服务的可用性和可靠性,是服务调用中常用的负载均衡组件之一。