fegin负载均衡策略示例


    org.springframework.cloud
    spring-cloud-starter-netflix-eureka-client
    2.2.3.RELEASE



    org.springframework.cloud
    spring-cloud-starter-openfeign
    2.2.3.RELEASE

@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 的负载均衡策略实现简单、易于扩展,并且能够提高服务的可用性和可靠性,是服务调用中常用的负载均衡组件之一。

你可能感兴趣的:(负载均衡,eureka,spring,cloud)