美文网首页
【Spring Cloud 系列 三】Ribbon 实现客户端侧

【Spring Cloud 系列 三】Ribbon 实现客户端侧

作者: 司鑫 | 来源:发表于2018-08-30 23:40 被阅读51次

一 Ribbon 简介


Ribbon 是 Netflix 发布的负载均衡器,它有助于控制 HTTP 和 TCP 客户端的行为。在为 Ribbon 配置服务提供者列表后,Ribbon 就可以基于某种负载均衡算法,自动的帮助服务消费者去请求。 Ribbon 默认提供了很多的负载均衡算法,例如轮询,随机等,也可以自定义负载均衡算法。

在 Spring Cloud 中,当 Ribbon 个Eureka 配合使用时,Ribbon 可以自动从 Eureka Server 中获取服务提供者地址列表,并基于负载均衡算法,请求其中的一个满足需求的服务提供者实例。


Ribbon & Eureka

示例代码在 微服务注册与发现基础上添加

二 为服务消费者整合 Ribbon

  1. 在 microservice-consumer-movie 的基础上添加依赖
compile group: 'org.springframework.boot', name: 'spring-boot-starter-web', version:'1.5.9.RELEASE'
compile group: 'org.springframework.cloud', name: 'spring-cloud-starter-netflix-eureka-client', version:'1.4.0.RELEASE'
  1. RestTemplate 添加 @LoadBalanced 注解
@EnableDiscoveryClient
@SpringBootApplication
public class ConsumerMovieApplication {
  @Bean
  @LoadBalanced
  public RestTemplate restTemplate() {
    return new RestTemplate();
  }

  public static void main(String[] args) {
    SpringApplication.run(ConsumerMovieApplication.class, args);
  }
}

当给RestTemplate 添加 @LoadBalanced 注解后,在使用 RestTemplate 时就会具备负载均衡的能力。

  1. 修改 Controller
@RestController
public class MovieController {
  @Autowired
  private RestTemplate restTemplate;

  @GetMapping("/user/{id}")
  public User findById(@PathVariable Long id) {
    return this.restTemplate.getForObject("http://microservice-provider-user/" + id, User.class);
  }
}

其中 microservice-provider-user 为 虚拟主机名,当有其他服务注册到 Eureka Server 中,那么在发送请求时就会去注册列表中去找 application namemicroservice-provider-user 的服务提供者,并映射其虚拟主机名对应的ip地址,如果注册的有多个相同的虚拟主机名,那么就会根据负载均衡算法返回其中一个服务提供者的ip。

3 测试

  • 启动 microservice-discovery-eureka
  • 启动多个 microservice-provider-user
  • 启动microservice-consumer-movie
  • 访问 http:localhost:8761,可见我们注册了三个services,一个 consumer,两个相同的 provider
  • 当多次访问 http://localhost:8010/user/1 时,会轮询(默认方式)请求 注册到 Eureka Server 中虚拟主机名为 microservice-provider-user 中的一个。

三 脱离 Eureka 使用 Ribbon

如果我们没有使用 Eureka 或者甚至没能使用 Spring Cloud 的情况下,我们想要单独使用 Ribbon 的负载均衡功能。那么对于 consumer 端,可以将配置文件application.yml修改为

server:
  port: 8080
spring:
  application:
    name: microservice-consumer-movie
microservice-provider-user: ## 在 consumer 中使用调用的虚拟主机名称
  ribbon:
    listOfServers: localhost:8000, localhost:8001 ## 此处的域名为 providers 的列表

示例代码

相关文章

网友评论

      本文标题:【Spring Cloud 系列 三】Ribbon 实现客户端侧

      本文链接:https://www.haomeiwen.com/subject/kekjwftx.html