微服务5-Ribbon实现客户端侧负载均衡

格物致知,格ribbon实现的客户端负载均衡。
控制HTTP和TCP客户端的行为,根据服务提供者地址列表,ribbon可以自动的帮助服务消费者取请求。ribbon默认提供了很多的负载均衡算法,例如轮询,随机等。我们也可以为Ribbon实现自定义的负载均衡算法。
Spring Cloud中,Ribbon自动从Eureka Server获取服务提供者地址列表,并基于负载均衡算法,请求其中一个服务提供者实例。


整合Ribbon

spring-cloud-starter-eureka中已经包含了 spring-cloud-starter-ribbon
为服务消费者的restTemplate加上注解即可:

@Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

获取当前的选择是哪个节点:

@Autowired
private LoadBalancerClient loadBalancerClient;

@GetMapping("/log-instance")
public void logUserInstance() {
    ServiceInstance instance = this.loadBalancerClient.choose("user-service");
    log.info("{}:{}:{}", instance.getServiceId(), instance.getHost(), instance.getPort());
}

更改ribbon配置

  • 使用java代码方式更改。比如负载均衡算法:

以下RibbonConfiguration类不能包含在@ComponentScan中,也就是不能包含在main方法类的同级或者子目录中,应该新建一个包隔开,否则这个类中的所有配置信息就会被所有的@RibbonClient共享。

@Configuration
public class RibbonConfiguration {
    @Bean
    public IRule ribbonRule() {
        return new RandomRule();
    }
}
@Configuration
@RibbonClient(name="user-service", configuration = RibbonConfiguration.class)
public class TestConfiguration {
    // 为特定服务user-service的Ribonn Client自定义配置。创建一个空类即可。
}
  • 使用配置的方式,从Spring Cloud Netflix 1.2.0开始支持(Camden SR4使用的版本是1.2.4),实现效果和java方式一样。
user-service:
  ribbon:
    NFLoadBalanceRuleClassName: com.netflix.loadbalancer.RandomRule

Ribbon均衡负载单独使用

  1. spring-cloud-starter-ribbon替代spring-cloud-starter–eureka,
    使其脱离eureka-server(不注册到Eureka Server上)

  2. 去掉类上的@EnableDiscoveryClient注解

  3. 将application.yml改成如下
server:
    port: 8010
spring:
    application:
        name: movie-service
user-service:
    ribbon:
        listOfServers: localhost:8000,localhost:8001
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值