springcloud服务治理 ---- Ribbon 客户端负载均衡

Eureka client– 高可用
单机环境下使用端口进行区别,启动多个即可。
在客户端有多个的情况下,可以使用Ribbon进行负载均衡(eureka依赖ribbon,无需在导ribbon坐标)
Ribbon 客户端负载均衡
ribbon简洁:
Ribbon是 Netflix 提供的一个基于HTTP和TCP的客户端负载均衡工具。
Ribbon主要有两个功能:
1.简化远程调用
------使用 Ribbon 简化restTemplate调用
* 1. 在声明restTemplate的Bean时候,添加一个注解:@LoadBalanced
* 2. 在使用restTemplate发起请求时,需要定义url时,host:port可以替换为 服务提供方的 应用名称

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 RestTemplateConfig {

    @Bean
    @LoadBalanced  //简化远程调用
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}
package com.itheima.eurekaconsumer.controller;

import com.itheima.eurekaconsumer.domain.Goods;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

/**
 * 服务的调用方
 */

@RestController
@RequestMapping("/order")
public class OrderController {

    @Autowired
    private RestTemplate restTemplate;
    /**
     * 使用 Ribbon 简化restTemplate调用
     * 1. 在声明restTemplate的Bean时候,添加一个注解:@LoadBalanced
     * 2. 在使用restTemplate发起请求时,需要定义url时,host:port可以替换为 服务提供方的 应用名称
     * @param id
     * @return
     */
    @GetMapping("/goods2/{id}")
    public Goods findGoodsById2(@PathVariable("id") int id){
        System.out.println("findGoodsById..."+id);

        String url = "http://EUREKA-PROVIDER/goods/findOne/"+id;
        // 3. 调用方法
        Goods goods = restTemplate.getForObject(url, Goods.class);

        return goods;
    }
}

2.负载均衡
Ribbon 负责均衡策略:
1.随机 :RandomRule
2.轮询 :RoundRobinRule (默认)
3.最小并发:BestAvailableRule 选择并发量最小的
4.过滤:AvailabilityFilteringRule 过滤掉坏的、并发量高的
5.响应时间:WeightedResponseTimeRule 选择最先响应的
6.轮询重试:RetryRule
7.性能可用性:ZoneAvoidanceRule 综合所有性能,选择性能最好的

设置负载均衡策略(设置在客户端的消费者)
1.编码

创建一个配置类,指定负载均衡策略

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author CZM
 * @date 2021 03 19 15:16
 * 设置负载均衡策略(编码方式)
 */
@Configuration
public class MyRule {

    @Bean
    public IRule rule(){
        return new RandomRule();  //随机
    }
}

在启动类使用注解@RibbonClient激活配置

package com.itheima.eurekaconsumer;

import com.itheima.eurekaconsumer.config.MyRule;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@EnableDiscoveryClient // 激活DiscoveryClient
@EnableEurekaClient
@SpringBootApplication

/*
    配置Ribbon的负载均衡策略
     name :设置服务提供方的应用名称
     configuration :设置负载均衡的Bean
 */
@RibbonClient(name = "EUREKA-PROVIDER",configuration = MyRule.class)
public class EurekaConsumerApplication {

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

}

2.配置文件

# 配置的方式设置Ribbon的负载均衡策略
EUREKA-PROVIDER: # 设置的服务提供方的 应用名称
  ribbon:
    NFloadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 策略类

服务端负载均衡
负载均衡算法在服务端,由负载均衡器维护服务地址列表
客户端负载均衡
负载均衡算法在客户端(消费者),客户端维护服务地址列表

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chenzm666666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值