spring boot 负载均衡Ribbon


git地址
https://github.com/a18792721831/studySpringCloud.git

1. RestTemplate简介

RestTemplate 是 Spring Resources 中一个访问第三方RESTful API 接口的网络请求框架。RestTemplate 的设计原则和其他 Spring Template(例如JdbcTemplate、JmsTemplate)类似,都是为执行复杂任务提供了一个具有默认行为的简单方法。
RestTemplate 是用来消费 REST 服务的,所以 RestTemplate 的主要方法都与REST的 Http协议的一些方法紧密相连,例如 HEAD、GET、POST、PUT、DELETE和 OPTIONS 等方法,这些方法在 RestTemplate 类对应的方法为 headForHeaders()、getForObject()、postForObject()、put()和delete()等。
我们在写测试方法时用到的TestRestTemplate
在这里插入图片描述
就是用RestTemplate实现的
在这里插入图片描述

2. Ribbon简介

负载均衡是指将负载分摊到多个执行单元上,常见的负载均衡有两种方式。一种是独立进程单元,通过负载均衡策略,将请求转发到不同的执行单元上,例如Ngnix。另一种是将负载均衡逻辑以代码的形式封装到服务消费者的客户端上,服务消费者客户端维护了一份服务提供者的信息列表,有了信息列表,通过负载均衡策略将请求分摊给多个服务提供者,从而达到负载均衡的目的。
Ribbon是 Netflix 公司开源的一个负载均衡的组件,它属于上述的第二种方式,是将负载均衡逻辑封装在客户端中,并且运行在客户端的进程里。Ribbon是一个经过了云端测试的IPC库,可以很好地控制HTTP和TCP客户端的负载均衡行为。
在Spring Cloud 构建的微服务系统中,Ribbon作为服务消费者的负载均衡器,有两种使用方式,一种是和RestTemplate相结合,另一种是和 Feign相结合。
Ribbon有很多子模块,但很多模块没有用于生产环境,目前Netilix 公司用于生产环境的Ribbon子模块如下。

  • ribbon-loadbalancer:可以独立使用或与其他模块一起使用的负载均衡器API。
  • ribbon-cureka:Ribbon 结合 Eureka 客户端的API,为负载均衡器提供动态服务注册列
    表信息。
  • ribbon-core:Ribbon的核心API。
    在这里插入图片描述
    不知是否还有人维护?
    积累了140多个issues没人处理
    在这里插入图片描述
    在这里插入图片描述

3. 实例–使用RestTemplate和Ribbon消费服务

3.1 启动eureka server

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2 多实例启动eureka client

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.3 验证eureka

在这里插入图片描述
在这里插入图片描述

3.4 创建 Ribbon模块

在这里插入图片描述
在这里插入图片描述
项目结构
在这里插入图片描述

3.5 配置

在这里插入图片描述

3.6 创建Ribbon Config类

只需要在程序的IoC容器中注入一个restTemplate的Bean,并在这个Bean上加上@LoadBalanced注解,此时RestTemplate就结合Ribbon开启了负载均衡。(为什么?负载均衡策略有哪些?存疑)
在这里插入图片描述

3.7 创建service

在这里插入图片描述

3.8 service test

在这里插入图片描述
结果
在这里插入图片描述
默认是轮询策略。

3.9 创建controller

在这里插入图片描述

3.10 controller test

在这里插入图片描述
结果
在这里插入图片描述

3.11 启动

在这里插入图片描述
访问
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. LoadBalancerClent

负载均衡器的核心类为LoadBalancerClient,它可以获取负载均衡的服务提供者的实例信息。
我们上述的项目基础上,在创建一个模块。
在这里插入图片描述
如下配置
在这里插入图片描述
写一个controller
在这里插入图片描述
打上断点,调试启动。
不要忘记这里:
在这里插入图片描述
在这里插入图片描述
查看choose方法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里getserver,打上断点,继续。
首先看getLoadBalancer
进入打断点
在这里插入图片描述
接下来
getLoadBalancer
在这里插入图片描述
在这里插入图片描述
通过反射,获取IClientConfig.
接下来是
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
loadBalancer有什么?
在这里插入图片描述
在这里插入图片描述
从上述图片看出,本次请求应该是8764
在这里插入图片描述
看下allServers
在这里插入图片描述
是个接口,其实现有
在这里插入图片描述
有四个实现类,本次使用从调试信息看是使用第二个实现类。猜测这里应该是不同的策略。

5. 本地serverList

在4的基础上进行修改:
设置不连接eureka server
且定义stores,这个stores就是我们之前的eureka-client 的url
在这里插入图片描述
接着修改controller
在这里插入图片描述
然后运行:
在这里插入图片描述
在这里插入图片描述
这里的list就是我们配置的本地的list

发布了182 篇原创文章 · 获赞 88 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/a18792721831/article/details/104482835