Ribbon用于负载均衡

运行微服务的一个实例,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客户端从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个服务器。


 

猜你喜欢

转载自zsjg13.iteye.com/blog/2408193