Eureka集成ribbon客户端负载均衡以及服务调用

服务调用

Eureka内部已经集成了ribbon,因此我们直接使用就可以

  • 在创建RestTemplate的时候,声明@LoadBalanced
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
    return new RestTemplate();
}
  • 使用restTemplate调用远程微服务
restTemplate.getForObject("http://product-service/product/getProduct/"+id,String.class);

ip和端口使用服务名代替

负载均衡

ribbon是一个典型的客户端负载均衡器,在发起访问之前,ribbon会根据内部的负载均衡算法,获取本次请求应该访问的地址。

负载均衡策略

  • com.netflix.loadbalancer.RoundRobinRule:以轮询的方法进行负载均衡(默认)
  • com.netflix.loadbalancer.RandomRule:随机策略
  • com.netflix.loadbalancer.RetryRule:重试策略
  • com.netflix.loadbalancer.WeightedResponseTimeRule:权重策略,会计算每隔服务的权重,越高的被调用的可能性就越大
  • com.netflix.loadbalancer.BestAvailabilityFilteringRule:可用过滤策略,过滤掉故障和请求超过阈值的服务实例,再从剩下的实例中轮询调用
    在服务消费者中的yml文件中选择负载均衡策略:
#修改ribbon的负载均衡策略,规则 服务名:ribbon:NFLoadBalancerRuleClassName:策略
product-service:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

策略选择建议:
根据机器的负载能力,如果性能都差不多,就用轮询策略就可以了,如果性能差别有点大,那就使用权重

重试机制

假如服务的消费者发送一个请求到服务提供者,在规定时间内没有响应(请求失败),则会根据负载均衡策略发送这个请求到另一台机器重试(默认情况下是不开启的)。

  • 在服务的消费者的pom文件中引入依赖:
<dependency>
  <groupId>org.springframework.retry</groupId>
    <artifactId>spring-retry</artifactId>
</dependency>
  • 在yml文件中,修改配置
product-service:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #重试策略
    ConnectTimeout: 250 #Ribbon的连接超时时间
    ReadTimeout: 1000 #Ribbon的数据读取超时时间
    OkToRetryOnAllOperation: true #是否对所有操作都进行重试
    MaxAutoRetriesNextServer: 1 #切换实例重试次数
    MaxAutoRetries: 1 #对当前实例的重试次数

注意,假如要关闭重试,则需要将OkToRetryOnAllOperation设置成false

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值