SpringCloud【负载均衡策略、OpenFeign概述、入门案列、日志增强 、超时机制 】(三)

news2024/11/27 5:38:05

目录

客户端负载均衡_负载均衡策略

服务接口调用_OpenFeign概述

服务接口调用OpenFeign_入门案列

服务接口调用OpenFeign_日志增强 

服务接口调用OpenFeign_超时机制 


客户端负载均衡_负载均衡策略

以前的Ribbon有多种负载均衡策略 

RandomRule - 随性而为

 解释:随机

RoundRobinRule - 按部就班

解释: 轮询 

 RetryRule - 卷土重来

解释: 先按照RoundRobinRule的策略获取服务,如果获取服务失败则在指定时间内会进行重试。 

WeightedResponseTimeRule - 能者多劳 

这个Rule继承自RoundRibbonRule,他会根据服务节点的响应时间计算权重,响应时间越长权重就越低,响应越快则权重越高,权重的高低决定了机器被选中概率的高低。也就是说,响应时间越小的机器,被选中的概率越大。

解释: 对RoundRobinRule的扩展,响应速度越快的实例选择权重越大,越容易被选择 

BestAvailableRule - 让最闲的人来 

解释: 应该说这个Rule有点智能的味道了,在过滤掉故障服务以后, 它会基于过去30分钟的统计结果选取当前并发量最小的服务节点,也就是最“闲”的节点作为目标地址。如果统计结果尚未生成,则采用轮询的方式选定节点。 

AvailabilityFilteringRule - 我是有底线的 

这个规则底层依赖RandomRobinRule来选取节点,但并非来者不拒,它也是有一些底线的,必须要满足它的最低要求的节点才会被选中。如果节点满足了要求,无论其响应时间或者当前并发量是什么,都会被选中。

解释: 每次AvailabilityFilteringRule(简称AFR)都会请求RobinRule 挑选一个节点,然后对这个节点做以下两步检查:是否处于不可用,节点当前的active请求连接数超过阈值,超过了则表示节点目前太忙,不适合接客如果被选中的server不幸挂掉了检 查,那么AFR会自动重试(次数最多10次),让RobinRule重新选择一个服务节点。 

 ZoneAvoidanceRule - 我的地盘我做主

解释: 默认规则,复合判断server所在区域的性能和server的可用性选择服务器 

 但LoadBalancer只提供了两种负载均衡器

1、RandomLoadBalancer 随机

2、RoundRobinLoadBalancer 轮询

 注意: 不指定的时候默认用的是轮询

实时效果反馈

1.下列是轮询负载均衡策略的是____。 

A RandomLoadBalancer

B RoundRobinLoadBalancer

C ZoneAvoidanceRule

D AvailabilityFilteringRule

2.下列是随机负载均衡策略的是_____。

A RandomLoadBalancer

B RoundRobinLoadBalancer

C ZoneAvoidanceRule

D AvailabilityFilteringRule

服务接口调用_OpenFeign概述

OpenFeign是什么 

Spring Cloud OpenFeign用于Spring Boot应用程序的声明式REST 客户端。

OpenFeign能干嘛 

Feign旨在使编写Java Http客户端变得更容易。前面在使用 RestTemplate时,利用RestTemplate对http请求的封装处理,形成了一套模版化的调用方法。

OpenFeign和Feign两者区别 

Feign是一个声明式WebService客户端。使用Feign能让编写Web Service客户端更加简单。它的使用方法是定义一个服务接口然后在上面添加注解。Feign也支持可拔插式的编码器和解码器。Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和 HttpMessageConverters。

注意: 接口+注解。 

实时效果反馈

1.Spring Cloud OpenFeign主要作用是____。

A 负载均衡

B 解决单点故障

C 服务调用

D 注册中心

2. Spring Cloud OpenFeign支持了_____标准注解。

A Spring MVC

B Spring Data

C Spring Batch

D 以上都错误 

服务接口调用OpenFeign_入门案列

构建cloud-consumer-feign-order80工程

修改POM文件 

<!-- 引入OpenFeign依赖 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

编写YML文件

eureka:
 client:
    # 表示是否将自己注册到Eureka Server
   register-with-eureka: true
    # 示是否从Eureka Server获取注册的服务信息
   fetch-registry: true
    # Eureka Server地址
   service-url:
     defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
 instance:
   instance-id: cloud-openfeign-order-consumer
   prefer-ip-address: true
spring:
 application:
    # 设置应用名词
   name: cloud-openfeign-order-consumer
server:
 port: 80

编写主启动类

/**
* 主启动类
*/
@Slf4j
@SpringBootApplication
@EnableFeignClients
public class OrderFeignMain80 {
    public static void main(String[] args) {
      SpringApplication.run(OrderFeignMain80.class,args);
        log.info("**************OrderFeignMain80 服务启动成功 **********");
   }
}

编写业务逻辑接口PaymentFeignService

/**
 * 支付远程调用Feign接口
 */
@Component
@FeignClient(value = "cloud-payment-provider")
public interface PaymentFeignService {
   @GetMapping("/payment/index")
   String index();
}

编写控制层Controller

/**
* 订单控制层
*/
@RestController
@RequestMapping("/order")
public class OrderController {
    @Autowired
    private PaymentFeignService paymentFeignService;
    /**
     * 测试OpenFeign接口调用
     * @return
     */
    @GetMapping("/index")
    public String get(){
        return paymentFeignService.index();
   }
}

测试

1 先启动2个Eureka集群7001/7002

2 在启动服务提供者payment8001

3 在启动服务消费者cloud-consumer-feign-order

4 浏览器访问http://localhost/order/index

服务接口调用OpenFeign_日志增强 

OpenFeign虽然提供了日志增强功能,但是默认是不显示任何日志的,不过开发者在调试阶段可以自己配置日志的级别。 

OpenFeign的日志级别如下:

NONE:默认的,不显示任何日志;

BASIC:仅记录请求方法、URL、响应状态码及执行时间;

HEADERS:除了BASIC中定义的信息之外,还有请求和响应的头信息;

FULL:除了HEADERS中定义的信息之外,还有请求和响应的正文及元数据。

 配置类中配置日志级别

@Configuration
public class OpenFeignConfig{
    
    /**
    * 日志级别定义
    */
    @Bean
    Logger.Level feignLoggerLevel(){
        return Logger.Level.FULL;
   }
}

注意: 这里的logger是feign包里的。

yaml文件中设置接口日志级别 

logging:
   level:
     com.itbaizhan.service: debug

注意: 这里的 com.tong.service 是openFeign接口所在的包名,当然你也可以配置一个特定的openFeign接口。

 测试

请求http://localhost/order/index

服务接口调用OpenFeign_超时机制 

超时机制 

问题:

1、服务消费者在调用服务提供者的时候发生了阻塞、等待的情形,这个时候,服务消费者会一 直等待下去。

2、在某个峰值时刻,大呈的请求都在同时请求服务消费者,会造成线程的大呈堆积,势必会造成雪崩。

3、利用超时机制来解决这个问题,设置一个超时时间,在这个时间段内,无法完成服务访问, 则自动断开连接。 

配置超时时间 

# 默认超时时间feign: client:   config:     
default:       # 连接超时时间       
connectTimeout: 2000       # 读取超时时间    
  readTimeout: 2000
 /**     * 测试超时机制     * @return     */

   @GetMapping("timeout")    
   public String   paymentFeignTimeOut()
    {
        try {          
                TimeUnit.SECONDS.sleep(5);
         } catch(InterruptedException e)
         {          
             e.printStackTrace();
         } 
         return  "payment success";
   }

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

@FeignClient("CLOUD-PAYMENT-PROVIDER")
public interface PaymentFeignService 
{  
     @GetMapping("/payment/index")    
        String  index();    
     @GetMapping("/payment/timeout")  
        String timeout();
}

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

  /**     * 测试超时机制     * @return     */
   @GetMapping("timeout")    
   public String  timeout()
    {
        return  paymentFeignService.timeout();
    }

实时效果反馈

1. OpenFeign技术中给服务设置超时时间解决___问题。

A 安全性

B 速度

C 响应慢

D 服务雪崩

2. OpenFeign技术中如何设置服务的读取超时时间_____。

A feign.client.config.default.readTimeout

B feign.client.config.connectTimeout

C feign.client.config.default.read

D feign.client.config.default.Timeout

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/778222.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

物联网如何为智慧城市提供动力

智慧城市可以创造一个基础设施顺畅、效率提升的乌托邦&#xff0c;改善城市地区的生活质量&#xff0c;促进当地经济发展。 其影响意义重大&#xff0c;预计到 2024 年智慧城市基础设施的收入将超过 1000 亿美元。 从改善公共交通到解决犯罪问题和提高能源效率——应有尽有&am…

2023年杭电多校第一场-E.Cyclically Isomorphic题解

样例&#xff1a; 输入&#xff1a; 2 2 2 ab ba 1 1 2 4 3 aab baa bba bab 6 1 2 1 3 1 4 2 3 2 4 3 4 输出&#xff1a; Yes Yes No No No No Yes 题目大意&#xff1a; 给定一个字符串数组&#xff0c;每次查询两个字符串是否可以通过一个字符串循环右移可以变成另一个字…

Java实现检测本地指定路径下某一个程序是否在运行

项目有一个需求需要通过网页超链接唤醒本地桌面程序&#xff0c;有一个小bug是重复打开桌面程序。需要后台开一个接口来判断本地桌面程序是否打开。可以通过以下简单的方法来实现。 要检测本地指定路径下某一个程序是否在运行&#xff0c;可以使用Java的ProcessBuilder类来实现…

千兆网口 VS 2.5G网口 VS 5G网口:如何选?

随着互联网应用的不断扩展和数据传输需求的增加&#xff0c;为了更好满足高质量、高效率的日常生活和工作需求&#xff0c;对于网络速度和数据传输能力的要求日益严苛。这推动了网络技术发展的进程。在千兆网口研发并普遍应用后&#xff0c;又进一步研发出了2.5G网口和5G网口两…

硬件知识:从1.0到5.3,各版本蓝牙协议有什么功能特点

目录 蓝牙1.0 蓝牙1.1 蓝牙1.2 蓝牙2.0 蓝牙2.1 蓝牙3.0 蓝牙4.0 蓝牙4.1 蓝牙4.2 蓝牙5.0 蓝牙5.1 蓝牙5.2 蓝牙5.3 不断更新的蓝牙协议升级了哪些功能&#xff1f; 蓝牙作为一种小范围无线连接技术&#xff0c;具有低功耗、低成本、方便快捷的特点&#xff0c;…

基于whisper和whisperx的语音视频和字幕对齐

环境的安装 创建py310虚拟环境,需要安装Anaconda的Python环境。 Python初学者在不同系统上安装Python的保姆级指引 Win10+Python3.9+GPU版pytorch环境搭建最简流程 Python虚拟环境的安装和使用 还需要提前安装FFmpeg用于音频操作,并添加到环境变量中。 创建一个名称为w…

中移链与BSN分布式云管平台集成,共同构建专属协同体系

01 中移链与BSN分布式云管平台集成&#xff0c; 融入BSN生态体系 中移链OPB&#xff08;OPB即开放联盟链&#xff0c;Open Permissioned Blockchain&#xff09;与BSN基于BSN分布式云管平台&#xff0c;打造了中移链专属门户、中移链专属运营、中移链专属运维功能模块&#x…

龙曲良 Tensorflow —— 随机梯度下降(自用)-4

目录 一、梯度下降 二、激活函数及其梯度 2.1 最简单的阶梯激活函数 2.2 sigmoid / logistic&#xff08;tf.sigmoid&#xff09; 2.3 tanh&#xff08;tf.tanh&#xff09; 2.4 ReLU&#xff08;tf.nn.relu&#xff09; 三、损失函数及其梯度 四、单、多输出感知机梯度…

springBoot使用webSocket的几种方式以及在高并发出现的问题及解决

一、第一种方式-原生注解&#xff08;tomcat内嵌&#xff09; 1.1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency>1.2、配置文件 package …

HTML5——基础知识及使用

HTML 文件基本结构 <html><head><title>第一个页面</title></head><body>hello world</body> </html> html 标签是整个 html 文件的根标签(最顶层标签).head 标签中写页面的属性.body 标签中写的是页面上显示的内容.title 标…

LiveGBS流媒体平台GB/T28181功能-用户管理数据支持页面excel导入数据excel导出数据

LiveGBS功能-用户管理数据支持页面excel导入数据excel导出数据 1、用户管理2、Excel导出导入2.1、支持用户数据的Excel导出2.2、支持用户数据的Excel导入 3、搭建GB28181视频直播平台 1、用户管理 用户管理&#xff0c;支持配置添加管理员、操作员、观众等角色的用户&#xff…

QGIS二次开发:集成二维CAD控件MxDraw

本文记录在QGIS中集成MxDraw控件的方法。 一、安装MxDraw 参见笔者博文“FreeCAD二次开发&#xff1a;集成二维CAD控件MxDraw”所述的安装方法。 二、编译安装QGIS 参见笔者博文"Windows 10下编译安装QGIS"所述的编译安装方法。 二、集成方法 2.1 添加MxDrawVie…

JAVA主流压缩解压工具对比、用法与选取

一、JAVA主流压缩工具 java.util.zip&#xff1a; **说明&#xff1a;**Java标准库提供的压缩与解压功能&#xff0c;包含在java.util.zip包中。通过ZipInputStream和ZipOutputStream可以实现ZIP格式的压缩与解压缩操作。 适用场景&#xff1a; 适合简单的ZIP格式压缩与解压缩操…

FFMPEG android mac 编译 支持DASH/OPENSSL问题汇总

一 下载源码 FFMPEG https://github.com/FFmpeg/FFmpeg/tree/release/4.3 二 编写脚本 支持https 就必须添加open SSL 的编译 具体可以查看我的另一个关于open SSL 的 然后我们配置的一些路径 涉及 ndk 的一定要查看你用的ndk 版本 是否存在这些路径这是第一步 然后如果支…

按照Vue写WPF(1):属性绑定

文章目录 前言代码实现效果代码逻辑 总结 前言 作为一个使用Vue非常熟练的C#全干工程师。当我在接触WPF的时候&#xff0c;我就一直想用Vue的想法去重写WPF框架。经过一个星期的琢磨&#xff0c;终于琢磨出来了如何优雅的入参。期间看了上百篇博客&#xff0c;浏览了一堆的视频…

如何把打包的vue项目放到flask中:Flask init参数详解

参数列表 import_name: the name of the application package&#xff0c;感觉没什么用static_url_path: can be used to specify a different path for the static files on the web. Defaults to the name of the static_folder folder。描述静态文件&#xff08;css&#x…

vue3-Api和数据响应式的变化

问题1&#xff1a;为什么vue3中去掉了vue构造函数&#xff1f; 问题2&#xff1a;谈谈你对vue3数据响应式的理解 去掉了Vue构造函数 在过去&#xff0c;如果遇到一个页面有多个vue应用时&#xff0c;往往会遇到一些问题 <!-- vue2 --> <div id"app1">&…

sketch如何在线打开?有没有什么软件可以辅助

Sketch 在线打开的方法有哪些&#xff1f;这个问题和我之前回答过的「Sketch 可以在线编辑吗&#xff1f;」是一样的答案&#xff0c;没有。很遗憾&#xff0c;Sketch 没有在线打开的方法&#xff0c;Sketch 也做不到可以在线编辑。那么&#xff0c;那些广告里出现的设计软件工…

基于Java+SpringBoot+vue前后端分离网上购物商城系统设计实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

【高阶数据结构】B树

文章目录 一、B-树1. 常见的搜索结构2. B树概念3. B-树的查找4. B-树的插入分析 二、B树和B*树1. B树2. B*树 三、B-树的应用1. 索引2. MySQL索引简介2.1 MyISAM2.2 InnoDB 一、B-树 1. 常见的搜索结构 种类数据格式时间复杂度顺序查找无要求O(N)二分查找有序O(log2N)二叉搜索…