springcloud feign负载均衡_Ribbon&Feign

1. 什么是Ribbon及作用

(1) 什么是Ribbon?

Ribbon 是一个基于 Http 和 TCP 的客服端负载均衡工具,它是基于 Netflix Ribbon 实现的。它不像 spring cloud 服务注册中心、配置中心、API 网关那样独立部署,但是它几乎存在于每个 spring cloud 微服务中。 包括 feign 提供的声明式服务调用也是基于该 Ribbon 实现的。

ribbon 默认提供很多种负载均衡算法, 例如 轮询、随机 等等。甚至包含自定义的负 载均衡算法。

服务之间的通讯方式有两种 :一种是Ribbon方式 ,一种是声明式调用Feign

(2) Ribbon解决了什么问题?

解决并提供了微服务的负载均衡的问题

2. 集中式负载均衡与进程式的负载均衡区别

(1) 负载均衡方案有哪些分类?

(2) 什么是集中式负载均衡?

(3) 什么是进程内负载均衡?

(4) 二者之间有什么区别?

第一类:集中式负载均衡, 即在 consumer 和 provider 之间使用独立的负载均衡设施(可以是硬件,如 F5, 也可以是软件,如 nginx), 由该设施负责把访问请求通过某种策略转发 至 provider;

第二类:进程内负载均衡,将负载均衡逻辑集成到 consumer,consumer 从服务注册中 心获知有哪些地址可用,然后自己再从这些地址中选择出一个合适的 provider。

Ribbon 就属于后者,它只是一个类库,集成于 consumer 进程,consumer 通过它来获取 到 provider 的地址。

3. Ribbon的入门案例

(1) Ribbon中默认的负载均衡策略是什么策略?

Ribbon 中对于集群的服务采用的负载均衡的策略默认的是轮询

(2) LoadBalancerClient对象得作用是什么?

负载均衡器,通过choose方法指定调用哪个服务,进而实现负载均衡

4. Ribbon常见负载均衡策略

(1) Ribbon的负载均衡策略有哪些?

默认轮询,

权重轮询,

随机策略,

最少并发策略,

在上述策略基础上添加重试机制,

可用性敏感策略

(2) 每一种负载均衡的特点是什么?

a1c9d3f2b3e618343c83b740ed5d0d58.png

a1c9d3f2b3e618343c83b740ed5d0d58.png

a1c9d3f2b3e618343c83b740ed5d0d58.png

a1c9d3f2b3e618343c83b740ed5d0d58.png

5. 如何更换其他负载均衡策略

(1) 阐述更换其他负载均衡策略的步骤。

修改代码更换负载均衡策略 ( 添加配置类,或者在启动类进行添加这个方法)

配置文件更换负载均衡策略

分享/讲解/扩展思考

点名提问从第一节课到最后一节课分别学到了什么,直到同学们把所有的知识点都说出来并且保证无误。

第240次(Ribbon&Feign)

学习主题:Ribbon&Feign

学习目标:

对应视频:

http://www.itbaizhan.cn/course/id/85.html

对应文档:

对应作业

6. Ribbon的点对点直连

(1) 什么情况下需要配置Ribbon的点对点直连?

不通过注册中心,直接连接服务提供者

(2) 配置Ribbon点对点直连的步骤是什么?

去掉eureka依赖,添加Ribbon依赖

修改配置文件

默认使用轮询,可以修改

7. 什么是Feign及作用

(1) 什么是Feign?

(2) 什么是声明式服务调用?

(3) 声明式服务调用有什么作用?

(4) 声明式服务调用决了什么?

Feign 是一种声明式、模板化的 HTTP 客户端(仅在 consumer 中使用)。

声明式调用就像调用本地方法一样调用远程方法

无感知远程 http 请求

Spring Cloud 的声明式调用, 可以做到使用 HTTP 请求远程服务时能就像调用本地方法一样的体验,开发者完全感知不到这是远程方法,更感知不到这是个 HTTP 请求。

它像 Dubbo 一样,consumer 直接调用接口方法调用 provider,而不需要通过常规的 Http Client 构造请求再解析返回数据。

它解决了让开发者调用远程接口就跟调用本地方法一样,无需关注与远程的交互细节,更无需关注分布式环境开发。

8. Feign入门案例-创建product-service

(1) 创建服务的API项目。

(2) 修改POM文件添加相关依赖坐标。

(3) 编写查询所有商品的接口。

Pom文件添加web启动器即可

/**

* 业务层接口

* 注意: @RequestMapping可以修饰接口类与接口方法

* @author chy

*

*/

@RequestMapping("/product")

public interface ProductService {

/**

* 查询所有

* @return

*/

@RequestMapping(value="findAll",method=RequestMethod.GET)

public List<Product> findAll();

}

9. Feign入门案例-创建product-provider

(1) 创建实现服务API的Provider。

(2) 修改POM文件添加相关依赖坐标。

(3) 修改POM文件添加服务API项目的坐标。

(4) 修改POM文件添加服务API项目的坐标。

(5) 创建Controller实现服务API的接口,并实现接口中的抽象方法。

<dependencies>

<!-- springBoot 的启动器 -->

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

<!-- thymeleaf -->

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-thymeleaf</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-test</artifactId>

<scope>test</scope>

</dependency>

<!-- 添加Ego-Product-Service的坐标 -->

<dependency>

<groupId>ah.sxzx.springcloud</groupId>

<artifactId>12-SpringCloud-Ego-Product-Service</artifactId>

<version>0.0.1-SNAPSHOT</version>

</dependency>

</dependencies>

@RestController

public class ProductController implements ProductService{

@Override

public List<Product> findAll() {

List<Product>products=new ArrayList<Product>();

products.add(new Product(1,"保健品"));

products.add(new Product(2,"家电产品"));

products.add(new Product(3,"生活用品"));

products.add(new Product(4,"数码产品"));

System.out.println(products);

return products;

}

}

10. Feign入门案例-创建product-consumer

(1) @RestController注解的作用是什么?

(2) @FeignClient注解的作用是什么?

(3) @EnableFeignClients注解的作用是什么?

(4) @EnableDiscoveryClient注解的作用是什么?

@RestController:指定这个controller下的所有方法返回json类型数据

@FeignClient声明被调用的项目

@EnableFeignClients标志这个项目使用Feign进行声明式调用

@EnableDiscoveryClient指定该项目可以被Eureka服务端发现

11. Feign传递单个参数

(1) 阐述Feign传递单个参数的原理。

使用@RequestParam注解修饰参数,确保参数接受过程中不出错。

12. Feign传递多个参数-方式一使用GET

(1) 使用Feign基于GET请求传递多个参数的原理是什么?

不能直接传递一个pojo,只能将数据打散,分别传递。可以使用get方式传递对象指的是consumer与Provider传递信息的方式,而不是浏览器与consumer的请求方式,当然一致也是可以

13. Feign传递多个参数-方式二使用POST

(1) 使用Feign基于POST请求传递多个参数的原理是什么?

Post方式可以传递对象需要使用@ResquestBody指的是consumer与Provider传递信息的方式,而不是浏览器与consumer的请求方式,当然一致也是可以

14. Gzip介绍及Http协议中的传输规则

(1) 什么是Gzip?

(2) HTTP协议中关于压缩传输的规定是什么?

gzip 介绍:gzip 是一种数据格式,采用用 deflate 算法压缩 data;gzip 是一种流行的文件 压缩算法,应用十分广泛,尤其是在 Linux 平台。 gzip 能力:当 Gzip 压缩到一个纯文本文件时,效果是非常明显的,大约可以减少 70%以上的文件大小。

第一:客户端向服务器请求中带有:Accept-Encoding:gzip, deflate 字段,向服务器表示, 客户端支持的压缩格式(gzip 或者 deflate),如果不发送该消息头,服务器是不会压缩的。

第二:服务端在收到请求之后,如果发现请求头中含有 Accept-Encoding 字段,并且支持该类型的压缩,就对响应报文压缩之后返回给客户端,并且携带 Content-Encoding:gzip 消息头,表示响应报文是根据该格式压缩过的。

第三:客户端接收到请求之后,先判断是否有 Content-Encoding 消息头,如果有,按该格式解压报文。否则按正常报文处理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值