欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Ribbon用于负载均衡

程序员文章站 2022-06-09 12:33:05
...

运行微服务的一个实例,URL是硬编码在客户端中,以及服务与服务间的调用中。现实情况中,此办法不

妥,因为服务的实例可以有多个,此时,我们应当使用一个load balancer或一个本地DNS服务器来抽象

掉实际实例的位置,在客户端中配置的就应该是一个别名或load balancer的地址。load balancer

之后接收到别名,将其解析成可用实例中的一个。用此方式,我们就能配置许多实例,它还帮助处理

服务器失败问题,这对于客户端来说是透明的。

 

上面说的主意可以用Spring Cloud Netflix Ribbon来实现。Ribbon是一个客户端load balancer,

它可以在一组服务器上执行round-robin load balancing。Ribbon库也可以有其他负载均衡算法。

 

Spring Cloud提供来一种声明的方式来配置和使用Ribbon client。


Ribbon用于负载均衡
            
    
    博客分类: Spring Cloud
 

 

如上图所示,Ribbon客户端从Config服务器获取所有可用微服务实例的一个列表,并且,默认运用

round-robin负载均衡算法。

 

为了使用Ribbon客户端,需添加如下maven依赖:

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

 

修改Booking微服务配置文件,booking-service.properties,添加一个新的属性用来配置

一组Fare微服务:

fares-proxy.ribbon.listOfServers=localhost:8080,localhost:8081

 

此时要修改原先的FareServiceProxy类,以便使用Ribbon客户端,注意到原先@RequestMapping

中的value需要从/get改成/fares/get,这样的话,就很容易把host name和port移到配置文件中:

@FeignClient(name="fares-proxy")
@RibbonClient(name="fares")
public interface FareServiceProxy {
  @RequestMapping(value = "fares/get", method=RequestMethod.GET)

 

 

这个时候,我们就能运行2个Fares微服务实例,一个在8080,一个在8081:

java -jar -Dserver.port=8080 fares-1.0.jar
java -jar -Dserver.port=8081 fares-1.0.jar

 

运行Booking微服务,当它启动时,它的CommandLineRunner会自动插入一个booking记录,这会走

第一个服务器。

 

当运行website项目,它调用Booking服务,该请求走第2个服务器。


 

  • Ribbon用于负载均衡
            
    
    博客分类: Spring Cloud
  • 大小: 30.1 KB