SpringCloud学习笔记(四)----分布式技术栈之Ribbon实现负载均衡

一、简介
1、概念
Spring Cloud Ribbon是基于Netflix Ribbon实现的客户端负载均衡工具
负载均衡简单的说就是将用户的请求平摊的分配到多个服务山,从而达到系统的HA(高可用)

2、常用的负载均衡软件:Nginx、LVS
SpringCloud的负载均衡算法可用自定义

3、负载均衡简单分类:
集中式LB,如Nginx(消费方和提供方之间使用独立的LB设施)
进程式LB,如Ribbon(将LB逻辑集成到消费方,消费方从服务注册中心获知哪些地址可用,然后在从这些地址中选出一个合适的服务器)

二、Ribbon的使用
1、客户端(消费方)导入依赖

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
	<version>2.2.2.RELEASE</version>
</dependency>
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
	<version>2.2.0.RELEASE</version>
</dependency>

2、修改配置文件

server:
  port: 80

eureka:
  client:
    register-with-eureka: false #是否向eureka注册自己
    service-url:
      defaultZone: 所有的Eureka的地址

3、添加@LoadBalanced注解和@EnableEurekaClient注解
1)RestTemplate Bean上添加@LoadBalanced注解

package com.xxs.springcloud.config;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class ConfigBean {

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

2)启动类上添加@EnableEurekaClient注解

package com.xxs.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

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

4、根据服务名(application name)请求服务

package com.xxs.springcloud.controller;

import com.xxs.springcloud.pojo.Dept;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;

@RestController
public class DeptConsumerController {

    @Autowired
    private RestTemplate restTemplate;//提供多种便捷访问远程http服务的方法,简单的restful服务模板

    //private static final String REST_URL_PREFIX="http://localhost:8001";
    //Ribbon,根据服务名来访问
    private static final String REST_URL_PREFIX="服务名";

    @GetMapping("/consumer/dept/get/{id}")
    public Dept get(@PathVariable("id") Long id){
        return restTemplate.getForObject(REST_URL_PREFIX+"/dept/get/"+id,Dept.class);
    }

    @RequestMapping("/consumer/dept/add")
    public boolean add(Dept dept){
        return restTemplate.postForObject(REST_URL_PREFIX+"dept/add",dept,Boolean.class);
    }

}

注意:请求服务时会根据负载均衡算法去做相应的服务请求
几种负载均衡算法:
1)轮询 RoundRobinRule
2)随机 RandomRule
3)重试 RetryRule(先做轮询,若服务获取失败,在指定时间内进行重试)
4)过滤 AvailabilityFilteringRule(先过滤掉故障的服务,对升序的轮询)
上边的类基本都是继承AbstractLoadBalancerRule类,因此可以自定义负载均衡算法,继承这个类即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值