SpringCloud系列(3)---Netfilx-Ribbon

在上一篇笔记当中,已经成功使用了服务注册和发现。但是所有微服务还是处於单点的状态,我们也应该对微服务进行负载均衡,这是相当有必要的。SpringCloud 提供了Ribbon负载均衡器。它可以有助于控制HTTP和TCP客户端的访问行为。为Ribbon配置服务提供者地址后,Ribbon就可以基于负载均衡算法进行负载均衡。Ribbon默认提供了很多种负载均衡算法,轮询、随机等。Ribbon也可以使用自定义的负载均衡算法。

在SpringCloud中,当Ribbon于Eureka 配合使用时,Ribbon可以自动从Eureka Server 获得服务提供者的地址列表,并基于特定的负载均衡算法,请求其中一个服务提供者。


一、整合Ribbon到微服务

如果你的微服务在MAVEN上已经整合了eureka,就不需要添加ribbon的依赖配置了。如果你想单独使用ribbon你可以添加如下的maven依赖:

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-ribbon</artifactId>
</dependency>

事实上非常简单,我们只需要在RestTemplate的bean当中,添加@LoadBalanced annotation即可:

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

然后然后开始测试,我们需要启动超过两个用户服务系统,从而观察会选择哪个节点。笔者已经启动了两个用户服务节点


我们在商品服务系统的测试controller当中,添加如下代码测试是否存在负载均衡:

@Autowired
private LoadBalancerClient loadBalancerClient;

@GetMapping("/testInstance")
public String testInstance() {
    ServiceInstance serviceInstance = this.loadBalancerClient.choose("tony-mall-provider-user");
    String hostAndPort = serviceInstance.getHost() + ":"
            + serviceInstance.getPort() + "[id:"
            + serviceInstance.getServiceId() + "]";
    return hostAndPort;
}
在几次测试当中发现是轮询的(只是估计):

192.168.28.100:8801[id:tony-mall-provider-user]

192.168.28.100:8801[id:tony-mall-provider-user]

在多次调用微服务的接口也是一样,发现每次调用SQL的服务器都是不同的,从而发现已经实现了负载均衡。


二、Ribbon的配置

从Spring Cloud Netfilx 1.2.0开始 已经提供使用配置方式定义Ribbon:

配置前缀为服务名称,如用户服务的名称就为:tony-mall-provider-user

例如:

tony-mall-provider-user.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule
事实上笔者目前的参考书上对配置部分讲解还是相对模糊,后续笔者将会继续参考其他书籍和官网文档,将会基础补充这一部分。

Ribbon可以脱离Eureka单独使用,但是这里我就不作演示了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章