Spring cloud微服务搭建(六)——Ribbon负载均衡

接上一篇:Spring cloud微服务搭建(五)——Eureka注册服务
Ribbon是Netflix发布的开源项目,提供客户端的软件负载均衡算法。

Ribbon属于进程内负载均衡,作为一个类库,集成于消费方进程中。消费方通过ribbon连接到目标服务器。

集成ribbon仅针对消费方。以下步骤码均在消费方中进行。

Maven依赖

ribbon在客户端进行负载均衡时,首先要从Eureka server获取可用的服务器列表。

因此,要引入eureka 客户端依赖:

  • 官方建议用spring-cloud-starter-netflix-eureka-client,代替已经过时的spring-cloud-starter-eureka
  • spring-cloud-starter-netflix-eureka-client已经内置对ribbon的支持,因此无需再引入ribbon依赖。否则,可能会报错"no instances available for …"
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-eureka-client -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    <version>3.0.0</version>
</dependency>

application.yaml

要配置eureka 客户端:

  • eureka.client.service-url:与注册中心进行交互的地址,也就是监控页面
    • service-url是map键值对类型
    • defaultZone:表示默认的注册中心地址
  • eureka.client.register-with-eureka:是否向注册中心注册自己,消费方可以不注册,为false
  • eureka.client.fetch-registry:false-表示自己为注册中心,此处为true
server:
  port: 80

eureka:
  client:
    service-url:
      defaultZone: http://localhost:7001/eureka/
    fetch-registry: true
    register-with-eureka: false

配置类中的RestTemplate

@LoadBalanced:开启负载均衡

  • @LoadBalanced注解的RestTemplate类,spring会将请求地址中的application name转为IP、端口号形式。
@Configuration
public class Config {
    @Bean
    @LoadBalanced
    public RestTemplate RestTemplate(){
        return new RestTemplate();
    }
}

Controller控制器

主要修改请求地址中的IP、端口号为服务方中配置的spring.application.name的值,此处为:springcloud-provider

#Spring的配置
spring:
  application:
    name: springcloud-provider

修改前:“http://localhost:8001”;

修改后:“http://SPRINGCLOUD-PROVIDER”

@RestController
public class DeptController {

    @Autowired
    private RestTemplate restTemplate;

    //private static final String REST_URL_PREFIX="http://localhost:8001";//
    private static final String REST_URL_PREFIX="http://SPRINGCLOUD-PROVIDER";

    @RequestMapping("/consumer/dept/list")
    public List<Department> queryAll(){
        return restTemplate.getForObject(REST_URL_PREFIX+"/dept/list", List.class);
    }

}

启动类

新增@EnableEurekaClient注解,开启对Eureka Client的支持

@SpringBootApplication
@EnableEurekaClient
public class DeptConsumer_80 {
    public static void main(String[] args) {
        SpringApplication.run(DeptConsumer_80.class,args);
    }
}

测试执行

服务提供方单点

在浏览器中输入http://localhost/consumer/dept/list,返回页面如下:

Spring cloud微服务搭建(六)——Ribbon负载均衡

多个服务提供方

为了体现ribbon的负载均衡功能,

  • 新建一个数据库db02
  • 新增一套服务提供方,连接新的数据库db02
  • 两个服务提供方yaml配置文件中的spring.application.name值保持一致,均为:springcloud-provider

​ 这是ribbon对两套服务提供方实行负载均衡的前提条件。

  • 默认使用的是轮询算法

    则页面返回值,交替出现db01 ,和db02的数据。

​ 若其中一台服务跳闸,命中这台机器时,页面会返回报错。

Spring cloud微服务搭建(六)——Ribbon负载均衡

更多:
Spring cloud开发环境搭建(一)——maven依赖

Spring cloud微服务搭建(二)——pojo实体类

Spring cloud微服务搭建(三)—— Spring cloud服务提供方

Spring cloud微服务搭建(四)——Spring cloud 消费方
Spring cloud微服务搭建(五)——Eureka注册服务

上一篇:springCloud ribbon均衡负载的配置及原理


下一篇:springcloud-Ribbon的负载均衡和Rest调用