【Springcloud篇】学习笔记三(七、八章):Ribbon负载均衡、OpenFeign接口调用

第七章_Ribbon负载均衡与服务调用

1.Ribbon概述

1.1Ribbon是什么

【Springcloud篇】学习笔记三(七、八章):Ribbon负载均衡、OpenFeign接口调用_第1张图片

1.2官网资料

自己搜

1.3能干嘛

一句话:负载均衡+RestTemplate调用

(1)LB—负载均衡
①Nginx—负载均衡

Nginx是服务器负载均衡,客户端所有请求都会交给nginx,然后由nginx实现转发请求,即实现负载均衡

②Ribbon—负载均衡

Ribbon是本地负载均衡。在调用微服务接口时候,会在注册中心上获取注册信息服务列表之后缓存到JVM本地,从而在本地实现RPC远程服务调用技术

③集中式LB

即在服务的消费方和提供方之间使用独立的LB设施(可以是硬件,如F5,也可以是软件,如nginx),由该设施负责把访问请求通过某种策略转发至服务的提供方。

④进程内LB

将LB逻辑集成到消费方,消费方从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选择出一个合适的服务器。

Ribbon属于进程内LB,只是一个类库,集成于消费方进程,消费方通过它来获取到服务提供方的地址

2.Ribbon负载均衡演示

2.1架构说明

Ribbon是一个软负载均衡的客户端组件,可以和其他所需请求的客户端结合使用,和eureka结合只是其中的一个实例

(1)Ribbon架构图

【Springcloud篇】学习笔记三(七、八章):Ribbon负载均衡、OpenFeign接口调用_第2张图片

(2)Ribbon的工作顺序

第一,选择EurekaServer,优先选择在同一个区域内负载较少的server

第二,根据用户指定的策略,再从server取到的服务注册列表中选择一个地址

其中用户指定的策略有:轮询、随机和根据响应时间加权

2.2POM文件

【Springcloud篇】学习笔记三(七、八章):Ribbon负载均衡、OpenFeign接口调用_第3张图片

2.3二说RestTemplate的使用

(1)getForObject()和getForEntity()方法的区别

【Springcloud篇】学习笔记三(七、八章):Ribbon负载均衡、OpenFeign接口调用_第4张图片

(2)postForObject()和postForEntity()方法的区别

postForObject()是post请求,可以携带参数,返回的对象是json格式。

调用的远程服务,返回的是什么,就是什么

postForEntity()是post请求,可以携带参数,返回的对象是Entity对象。

调用的远程服务,返回的是什么,再加上返回码。

3.Ribbon核心组件IRule

IRule:根据特定算法,从服务列表中选取一个要访问的服务

IDEA生成:

【Springcloud篇】学习笔记三(七、八章):Ribbon负载均衡、OpenFeign接口调用_第5张图片

3.1Ribbon默认自带的负载规则

【Springcloud篇】学习笔记三(七、八章):Ribbon负载均衡、OpenFeign接口调用_第6张图片

(1)修改默认规则
  • 说明:自定义配置类不能放在@ComponentScan所扫描的当前包下以及子包下,又主启动类上的注解@SpringBootApplication包含了注解@ComponentScan,所以得另起一个包放置自定义规则

    【Springcloud篇】学习笔记三(七、八章):Ribbon负载均衡、OpenFeign接口调用_第7张图片

【Springcloud篇】学习笔记三(七、八章):Ribbon负载均衡、OpenFeign接口调用_第8张图片

(2)新建MySelfRule规则类

【Springcloud篇】学习笔记三(七、八章):Ribbon负载均衡、OpenFeign接口调用_第9张图片

(3)主启动类添加@RibbonClient

指定重新配置的规则

【Springcloud篇】学习笔记三(七、八章):Ribbon负载均衡、OpenFeign接口调用_第10张图片

4.Ribbon负载均衡算法

4.1原理

【Springcloud篇】学习笔记三(七、八章):Ribbon负载均衡、OpenFeign接口调用_第11张图片

4.2源码

4.3手写轮询算法

(1)ApplicationContextBean去掉注解@LoadBalanced

【Springcloud篇】学习笔记三(七、八章):Ribbon负载均衡、OpenFeign接口调用_第12张图片

(2)主启动取消自己配置的规则

注意:是在80端口服务的主启动

【Springcloud篇】学习笔记三(七、八章):Ribbon负载均衡、OpenFeign接口调用_第13张图片

(3)编写LoadBalancer接口

【Springcloud篇】学习笔记三(七、八章):Ribbon负载均衡、OpenFeign接口调用_第14张图片

(4)手写轮询器

【Springcloud篇】学习笔记三(七、八章):Ribbon负载均衡、OpenFeign接口调用_第15张图片

(5)80服务的业务层

【Springcloud篇】学习笔记三(七、八章):Ribbon负载均衡、OpenFeign接口调用_第16张图片

(6)8001/8002服务的业务层

【Springcloud篇】学习笔记三(七、八章):Ribbon负载均衡、OpenFeign接口调用_第17张图片

(7)测试

访问:localhost/consumer/payment/lb

轮询效果出现,查看后台

【Springcloud篇】学习笔记三(七、八章):Ribbon负载均衡、OpenFeign接口调用_第18张图片

第八章_OpenFeign接口调用

1.OpenFeign简介

1.1OpenFeign是什么

【Springcloud篇】学习笔记三(七、八章):Ribbon负载均衡、OpenFeign接口调用_第19张图片

官网地址:Spring Cloud

1.2Feign能干什么

总结:Feign是一个服务接口绑定器,接口加一个注解

【Springcloud篇】学习笔记三(七、八章):Ribbon负载均衡、OpenFeign接口调用_第20张图片

1.3Feign和OpenFeign的区别

【Springcloud篇】学习笔记三(七、八章):Ribbon负载均衡、OpenFeign接口调用_第21张图片

2.OpenFeign使用步骤

2.1说明

微服务调用接口+@FeignClient,即接口+注解

【Springcloud篇】学习笔记三(七、八章):Ribbon负载均衡、OpenFeign接口调用_第22张图片

2.2新建cloud-consumer-feign-order80

(1)POM
	<dependencies>

        
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-openfeignartifactId>
        dependency>


        
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
        dependency>


        
        <dependency>
            <groupId>springcloudgroupId>
            <artifactId>cloud-api-commonsartifactId>
            <version>1.0-SNAPSHOTversion>
        dependency>

        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>

        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-actuatorartifactId>
        dependency>

        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-devtoolsartifactId>
            <scope>runtimescope>
            <optional>trueoptional>
        dependency>

        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
            <optional>trueoptional>
        dependency>

        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>


    dependencies>

(2)YML

【Springcloud篇】学习笔记三(七、八章):Ribbon负载均衡、OpenFeign接口调用_第23张图片

(3)主启动

【Springcloud篇】学习笔记三(七、八章):Ribbon负载均衡、OpenFeign接口调用_第24张图片

(4)业务类

【Springcloud篇】学习笔记三(七、八章):Ribbon负载均衡、OpenFeign接口调用_第25张图片

(5)测试
  • 先启动7001/7002服务
  • 再启动8001/8002订单服务
  • 最后启动feign80服务
(6)小总结

3.OpenFeign超时控制

3.1服务提供方8001/8002添加超时方法

【Springcloud篇】学习笔记三(七、八章):Ribbon负载均衡、OpenFeign接口调用_第26张图片

3.2服务消费方80添加超时方法

【Springcloud篇】学习笔记三(七、八章):Ribbon负载均衡、OpenFeign接口调用_第27张图片

3.3测试

【Springcloud篇】学习笔记三(七、八章):Ribbon负载均衡、OpenFeign接口调用_第28张图片

3.4修改默认连接和超时时间

【Springcloud篇】学习笔记三(七、八章):Ribbon负载均衡、OpenFeign接口调用_第29张图片

4.OpenFeign日志打印功能

Feign 提供了日志打印功能,我们可以通过配置来调整日志级别,从而了解 Feign 中 Http 请求的细节。

说白了就是对Feign接口的调用情况进行监控和输出

4.1日志级别

【Springcloud篇】学习笔记三(七、八章):Ribbon负载均衡、OpenFeign接口调用_第30张图片

4.2添加config配置类

【Springcloud篇】学习笔记三(七、八章):Ribbon负载均衡、OpenFeign接口调用_第31张图片

4.3yml设置日志打印级别

【Springcloud篇】学习笔记三(七、八章):Ribbon负载均衡、OpenFeign接口调用_第32张图片

4.4测试

【Springcloud篇】学习笔记三(七、八章):Ribbon负载均衡、OpenFeign接口调用_第33张图片

你可能感兴趣的:(Springcloud,spring,cloud,学习,笔记)