Spring Cloud-Ribbon负载均衡&Feign声明式服务调用

目录

一、Ribbon负载均衡

        1.1 什么是负载均衡

         1.2 自定义实现负载均衡

       1.3 Ribbon介绍

        1.4 基于ribbon实现负载均衡

       1.5 Ribbon的问题

二、声明式服务调用Feign

        2.1 背景

        2.2 Feign概述

         2.3 Feign入门程序

         2.4 feign原理概述

        2.5 feign接口传参的三种方式

         2.6  OpenFeign性能优化

          1、日志增强

         2、http连接池

         3、gzip压缩

         4、feign超时处理


一、Ribbon负载均衡

 

        1.1 什么是负载均衡

        通俗的讲,负载均衡就是将负载(工作任务,访问请求)进行分摊到多个操作单元(服务器,组件)上进行执行。

         1.2 自定义实现负载均衡

          1.2.1 创建两个服务提供者provider

           

           1.2.2 配置文件application.yml设置不同的端口号

#ribbon_provider_1
server:
  port: 9090
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.57.132 #nacos服务的地址
  application:
    name: ribbon-provider #向注册中心注册的名字

#ribbon_provider_2
server:
  port: 9091
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.57.132 #nacos服务的地址
  application:
    name: ribbon-provider #向注册中心注册的名字

         1.2.3 创建服务消费者consumer

        1.2.4  配置文件application.yml

server:
  port: 80
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.57.132 #nacos服务的地址
  application:
    name: ribbon-consumer #向注册中心注册的名字

           1.2.5 controller     

@RestController
@RequestMapping(value = "/consumer")
public class ConsumerController {
	
	//发送Rest请求的工具类
	@Autowired
	private RestTemplate restTemplate;
	//发现服务的工具类
	@Autowired
	private DiscoveryClient discoveryClient;

	private int index;

	@RequestMapping("/getService/{id}")
	public User getServic(@PathVariable Integer id){
		//获取所有服务
		List<String> serviceList = discoveryClient.getServices();
		//随机方式获得服务
		//int currentIndex = new Random().nextInt(serviceList.size());
		//轮询方式获得服务
		index=index + 1;
		int currentIndex = (index) % serviceList.size();

		ServiceInstance serviceInstance = discoveryClient.getInstances("ribbon-provider").get(currentIndex);
		String url = "http://"+serviceInstance.getHost()+":"+serviceInstance.getPort()+"/provider/getUserById/"+id;
		return restTemplate.getForObject(url, User.class);

	}
}

//RestTemplate工具类
@Configuration
public class ConfigBean {
	@Bean
	public RestTemplate restTemplate(){
		return new RestTemplate();
	}
}

        1.2.6 测试: 分别使用轮询和随机策略调用服务提供者

       1.3 Ribbon介绍

        1.3.1 什么是Ribbon

        Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。

        我们不需要去引入ribbon的依赖,因为在nacos里面已经集成了ribbon的依赖  

        Ribbon默认提供 很多种负载均衡算法,例如轮询、随机 等等。

        1.3.2 负载均衡策略

        负载均衡接口:com.netflix.loadbalancer.IRule

        1.3.2 随机策略 

Ribbon的默认内置了7种负载均衡策略:

1、RoundRobinRule

  轮询策略,Rabbon默认采用的策略,若经过一轮轮询没有找到可用的provider(提供者),其最多轮询10轮,若最终

      没有找到,则返回NULL。

      举例:当前有3个提供者A,B,C,先挨个轮询1遍,A,B,C都不访问(1轮),在A,B,C访问一遍(2轮次),一共试10轮

                如果还不能访问,则返回NULL。

2、RandomRule

  随机策略,从所有可用的provider(提供者)中选择一个。

3、RetryRule

  重试策略,先按照RoundRobinRule策略获取pro

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

天天向上的雨辰

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

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

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

打赏作者

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

抵扣说明:

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

余额充值