Hystrix——服务容错保护库

news2024/11/26 19:37:44

        熔断机制是解决微服务架构中因等待出现故障的依赖方响应而形成任务挤压最终导致自身服务瘫痪的一种机制,它的功能类似电路的保险丝,其目的是为了阻断故障,从而保护系统稳定性。Hystrix作为Spring Cloud中实现了熔断机制的组件,具有服务容错保护功能

Hystrix简介

什么是Hystrix?

概述:HystrixNetflix开源的一款针对分布式系统延迟和容错的库

作用:通过添加延迟容忍和容错逻辑,从而控制分布式服务之间的交互。

为什么用Hystrix?

        对于一个复杂的分布式系统,包含的应用可能多达数十个,这些应用有许多依赖项目,每个依赖项目在某个时刻不可避免会失败导致故障,如果不对这些故障进行隔离,整个分布式系统都可能会崩溃。

分布式系统中服务请求一切正常情况

分布式系统中服务有一个系统有延迟请求情况

分布式系统中其中有一个系统有延迟时,它可能阻塞整个用户请求:

分布式系统中服务高流量下请求情况 

高流量情况下,一个后端的依赖延迟可能会导致所有服务的资源在数秒内变的饱和,这也就意味着,后续如果再有请求将无法提供服务,应用会出现故障。比故障更糟糕的是,这些应用程序还可能导致服务之间的延迟增加,从而备份队列、线程和其他资源,从而导致整个系统出现更多级联故障.如图:

分布式系统中Hystrix解决服务请求堵塞情况 

        Hystrix的出现就是为了解决上述问题的,它封装了每个依赖项,每个依赖项彼此隔离,当延迟发生时,它会被限制在资源中,并包含回退逻辑,该逻辑决定在依赖发生任何类型故障时应作出何种响应。

简单创建Hystrix工程

工作架构图:

1.创建eureka-server项目

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.7.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.xiaofen</groupId>
    <artifactId>eureka-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>eureka-server</name>
    <description>Demo project for Spring Boot with Eureka Server</description>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.SR2</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>
                spring-cloud-starter-netflix-eureka-server
            </artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <!-- 如果需要,可以添加构建插件等配置 -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

application.yml

server:
  port: 7000                                        # 服务器端口号7000
spring:
  application:                                      #端口号名称配置
    name: eureka-server
eureka:
  client:
    fetch-registry: false                           # 表示是否向Eureka Server注册
    register-with-eureka: false                     # 表示是否从Eureka Server获取注册信息
    service-url:
      defaultZone:
        http://${eureka.instance.hostname}:${server.port}/eureka/   #设置服务注册中心地址
  instance:
    hostname: localhost

启动类

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }

}

2.创建eureka-hystrix-client项目

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.7.RELEASE</version>
        <relativePath/>
    </parent>
    <groupId>com.xiaofeng</groupId>
    <artifactId>eureka-hystrix-client</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>eureka-hystrix-client</name>
    <description>Demo project for Spring Boot</description>
    <url/>
    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.SR2</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
        </repository>
    </repositories>
</project>

application.yml

server:
  port: 8764
spring:
  application:
    name: eureka-hystrix-client
eureka:
  client:
    service-url:
      defaultZone: http://localhost:7000/eureka/
    instance:
      hostname: localhost

启动类添加这几个注解:

config:

@Configuration
public class HystrixConfig {
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

controller:

@RestController
public class HystrixController {
    @Autowired
    private HystrixService hystrixService;
    @GetMapping("/hi")
    public String hi(String id){
        return hystrixService.hi(id);
    }
}

 service:

@Service
public class HystrixService {
    @Autowired
    private RestTemplate restTemplate;
    @HystrixCommand(fallbackMethod = "hiError")
    public String hi(String id){
        return restTemplate.getForObject("http://hystrix-provider/hi?id="+id,String.class);
    }
    public String hiError(String id){
        return "此次调用进行服务降级,当前的id为:"+id;
    }
}

3.创建hystrix-provider项目

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.7.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.xiaofeng</groupId>
    <artifactId>hystrix-provider</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>hystrix-provider</name>
    <description>Demo project for Spring Boot</description>
    <url/>
    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.SR2</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</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>
            <version>2.1.7.RELEASE</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.1.7.RELEASE</version>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <!-- 如果需要,可以添加构建插件等配置 -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

启动类:

@SpringBootApplication
@EnableEurekaClient
public class HystrixProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(HystrixProviderApplication.class, args);
    }

}

controller:

@RestController
public class HystrixController {
    @RequestMapping("/hi")
    public String hi(String id){
        return "你好,访问接口成功,当前id为:"+id;
    }
}

4.项目测试

成功:

 

失败:

在Feign中使用Hystrix熔断器

开启Hystrix熔断

        Feign自带熔断功能,默认情况下,熔断功能是关闭的。如果要开启熔断,只需在配置文件中将hystrix.enabled设置为true即可。

        开启Hystrix熔断功能。在eureka-hystrix-client项目的配置文件application.yml中添加开启熔断的配置

feign:
  hystrix:
    enabled: true

         因为在Feign的起步依赖中引入了Hystrix依赖,所以在Feign中使用Hystrix不需要引入任何的依赖,只需要在配置文件中开启即可。

开启Feign Client功能

 eureka-hystrix-client的启动类中添加@EnableFeignClients开启Feign Client功能

修改项目中接口

        进入项目eureka-hystrix-client,在HystrixService接口上方的@FeignClient注解中,增加fallback属性配置,指定HystrixServiceImpl类为失败逻辑处理类

使用fallback属性指定的用于处理回退逻辑的类,必须实现@FeignClient注解修饰的接口。 

FeignHystrixServiceImpl实现了FeignHystrixService接口,并定义了一个hi()方法用于编写处理熔断的具体逻辑。这里,我们使用@Component注解修饰类FeignHystrixServiceImpl,其目的是将该类交给Spring容器管理。

controller

运行测试:

成功:

 失败:

 Hystrix工作原理

 Hystrix改为工作流程图

Hystrix的具体工作流程

1.实例化HystrixCommandHystrixObservableCommand对象

        第一步实例化HystrixCommandHystrixObservableCommand对象,是因为它们封装了对外部依赖访问的逻辑。

2.调用Command方法触发操作指令

        通过创建的HytrixCommandHystrixObservableCommand实例调用相关方法执行操作指令。Hystrix API提供了4个触发流程的方法供开发者调用,具体如下:

     1execute()方法:该方法是同步的,从依赖请求中接收到单个响应(或者出错时抛出异常)。

     2queue()方法:调用外部依赖只返回一个值,返回一个Future对象。

     3observe()方法:订阅一个从依赖请求中返回的Observable对象这个Observable对象包含了从依赖服务返回的结果。

     4toObservable()方法:返回一个Observable对象,只有当订阅一个从依赖请求中返回的Observable对象时,该方法才会执行Hystrix命令并返回结果。

3.根据依赖调用的缓存情况进行相应处理

        执行操作指令时,Hystrix首先会检查缓存内是否有对应指令的结果,如果有的话,将缓存的结果直接以Observable对象的形式返回

4.判断熔断器是否开启

        没有对应的缓存,Hystrix检查Circuit Breaker的状态。如果Circuit Breaker的状态为开启状态,Hystrix将不会执行对应指令,而是而是直接路由到第8步(Fallback),获取fallback方法,并执行fallback逻辑。

5.判断线程池/队列/信号资源是否已满

        如果Circuit Breaker状态为关闭状态,Hystrix会继续进行线程池、任务队列、信号量的检查(第5步),确认是否有足够的资源执行操作指令。如果资源满,Hystrix同样将不会执行对应指令,而是立即跳到第8,执行fallback逻辑

6.执行HystrixObservableCommand.construct()HystrixCommand.run()

如果资源充足,Hystrix将会执行操作指令操作指令的调用最终会到两个方法:

      1HystrixCommand.run(): 返回单个响应或者抛出异常。

      2HystrixObservableCommand.construct()返回一个发射响应的Observable   

         或者发送一个onError()的通知。

如果执行上述方法的执行时间大于命令所设置的超时时间值,那么该线程将会抛出一个TimeoutException异常在这种情况下,Hystrix将会路由到第8步,执行fallback逻辑,并且如果上述方法没有被取消或者中断,会丢弃这上述两个方法最终返回的结果。

如果命令最终返回了响应并且没有抛出任何异常,Hystrix在返回响应后会返回一些日志信息

     1如果是调用run()方法,Hystrix会返回一个Observable

     2如果是调用construct()方法,Hystrix会通过construct()方法返回  

          相同的Observable对象。

7.计算熔断器执行数据

Hystrix会报告成功、失败、拒绝和超时的指标给熔断器,熔断器包含了一系列的滑动窗口数据,并通过该数据进行统计。Hystrix使用这些统计数据来决定熔断器是否应该熔断,如果需要熔断,将在一定的时间内不再请求依赖(这个时间可以通过配置指定),当再一次检查请求的健康的话会重新关闭熔断器。

8.调用降级方法或者返回依赖请求的真正结果

 如果Hystrix命令执行成功,它将以Observable形式返回响应给调用者。根据第2)步的调用方式不同,在返回Observable之前可能会做一些转换

Dashboard监控熔断器状态

1.主要依赖pom.xml:

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

2.然后在原来项目基础上再添加开启DashBoard的注解:

@EnableHystrixDashboard

3.创建config包,config包下创建HystrixDashboardConfiguration,加入Hystrix.streamServlet配置。

@Configuration
public class HystrixDashboardConfiguration {
    @Bean
    public ServletRegistrationBean getServlet() {
        HystrixMetricsStreamServlet streamServlet = new
                HystrixMetricsStreamServlet();
        ServletRegistrationBean registrationBean = new
                ServletRegistrationBean(streamServlet);
        registrationBean.setLoadOnStartup(1);
        registrationBean.addUrlMappings("/hystrix.stream");
        registrationBean.setName("HystrixMetricsStreamServlet");
        return registrationBean;
    }
}

 4.测试

 还有一个图形化界面http://localhost:8764/hystrix

点击按钮后进入这个界面:

标注的是服务的健康程度。

② 数字从上往下依次是消费者请求调用者的请求成功数、短路或熔断数和失败

的次数。

③ 数字从上往下依次是消费者请求调用者的超时数、线程池拒绝数和请求异常数。

④ 表示集群下的主机报告。

⑤ 表示消费者请求调用者的请求频率

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

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

相关文章

(亲测有效)SpringBoot项目集成腾讯云COS对象存储(2)

接上文&#xff08;亲测有效&#xff09;SpringBoot项目集成腾讯云COS对象存储&#xff08;1&#xff09;-CSDN博客 目录 3、通用能力类 文件下载 测试 3、通用能力类 文件下载 官方文档介绍了2种文件下载方式。一种是直接下载 COS 的文件到后端服务器&#xff08;适合服务…

前端Mac解决localhost冲突问题!!!

1、报错提示&#xff1a; 运行项目的时候遇到了如下的问题&#xff0c;导致我项目运行不起来&#xff0c;查阅了一下资料发现是loaclhost有误 2、ping一下localhost 先打开终端&#xff0c;在终端输入命令&#xff1a;&#xff08;我输入这个命令的时候能ping通&#xff0c;当…

Android 使用`layer-list`打造精美的背景

引言 在 Android 开发中&#xff0c;layer-list 是一种强大的工具&#xff0c;可以帮助我们创建复杂的背景图形&#xff0c;&#x1f3a8; 这种方法可以大大提升应用的视觉效果。作为一名Android开发&#xff0c;理解和掌握 layer-list 的使用不仅可以让我们在 UI 设计上更加灵…

C++竞赛初阶L1-11-第五单元-for循环(25~26课)519: T454430 人口增长问题

题目内容 假设目前的世界人口有 x 亿&#xff0c;按照每年 0.1% 的增长速度&#xff0c;n 年后将有多少人&#xff1f; 输入格式 一行两个正整数 x 和 n&#xff0c;之间有一个空格。其中&#xff0c;1≤x≤100,1≤n≤100。 输出格式 一行一个数&#xff0c;表示答案。以亿…

【C++ 面试 - 基础题】每日 3 题(十八)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏&…

对象的初始化和清理(构造和析构)

目录 一. 前言 二. 构造函数和析构函数的语法 三. 构造函数的分类和调用 四. 构造函数的调用规则 五. 深拷贝和浅拷贝&#xff08;面试常考&#xff09; 六. 初始化列表 一. 前言 任何事物都需要有一个初始化的过程&#xff0c;例如手机&#xff0c;我们在买来使用的时候手…

win10 上安装部署WSA, 在win10上运行安卓程序

windows上跑安卓程序&#xff0c; 多年前用过蓝叠bluestacks安卓模拟器 甚至还在上面跑过微信 后来听说在bluestacks上用微信&#xff0c; 可能会被封&#xff0c; 就没有后来了 最近折腾在windows上如何投屏&#xff0c;主要是将ios无线投到win10电脑上&#xff08;安卓win10直…

免费文档翻译导出怎么弄?5个文档翻译器替你解决

在日常的工作与学习中&#xff0c;我们时常会遇到需要查阅或撰写跨语言文档的情况。然而面对这些专业性强、词汇量大的文件&#xff0c;逐字逐句地手动翻译不仅耗时费力&#xff0c;还可能因理解偏差导致信息失真。 幸运的是&#xff0c;如今有不少免费文档翻译软件横空出世&a…

LDR6020双盲插便携显示器方案:重塑连接体验的新标杆

在数字化高速发展的今天&#xff0c;便携显示器已成为商务人士、游戏爱好者及远程教育学习者的得力助手。然而&#xff0c;传统便携显示器在接口兼容性与易用性方面常存在诸多不便&#xff0c;如接口方向区分困难、信号类型不匹配等问题。为了彻底解决这些痛点&#xff0c;LDR6…

基于springboot物流管理系统

TOC springboot208基于springboot物流管理系统 第1章 绪论 1.1 研究背景 互联网时代不仅仅是通过各种各样的电脑进行网络连接的时代&#xff0c;也包含了移动终端连接互联网进行复杂处理的一些事情。传统的互联网时代一般泛指就是PC端&#xff0c;也就是电脑互联网时代&…

记录一次 Redis 优化发送数据(使用管道批量传送)

一 项目背景 此前的项目中&#xff0c;鉴于客户方服务器的安全配置对 MQ 中间件有所限制&#xff0c;我们只得采用 Redis 的 list 作为简易的 MQ 来传送报文数据。然而&#xff0c;近段时间客户关闭了相关端口&#xff0c;导致大量数据积压&#xff0c;需要进行补发。在补发过程…

Unity Obfuscator 使用说明

一、Assembly - Settings 1. 核心Unity程序集&#xff08;Assembly-CSharp&#xff09; Obfuscate Assembly-CSharp: 开启 这是Unity的核心程序集&#xff0c;所有没有存储在程序集定义文件&#xff08;assembly definition file&#xff09;中的代码都会被存储在这里。大多数…

排序算法介绍和sort函数应用(明明的随机数,奖学金)

排序算法介绍sort函数应用——[NOIP2006 普及组] 明明的随机数和[NOIP2007 普及组] 奖学金 1.排序算法介绍和常用排序方法复杂度2.sort函数应用2.1.[NOIP2006 普及组] 明明的随机数题目描述输入格式输出格式输入输出样例输入 #1输出 #1 提示2.1.1.题意解析2.1.2.AC代码 2.2.[NO…

win的netassist TCP测试工具和Linux的nc工具使用

写在前面 有时工作中我们编写一些tcp相关的程序&#xff0c;而netassist就是这样一款辅助我们进行TCP功能测试的工具&#xff0c;你可以从这里下载。 1&#xff1a;netassist使用 我们需要一个server程序&#xff0c;可以参考这篇文章&#xff0c;启动server后&#xff0c;就…

【python】Python如何调用外部命令,subprocess模块的详细解读以及应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

7za解压缩工具

1、unzip无法解压缩大于4G的文件 从Windows平台通过MobaXterm上传一个大小约为5G的zip文件到AutoDL Linux系统上&#xff0c;使用unzip解压过程中出现如下错误&#xff1a; 从网上搜索了一下相关资料&#xff0c;发现是当前的unzip版本不支持4G以上的压缩包。要么升级到最新…

N8 - 使用Word2Vec进行文本分类

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目录 N2 构建词典1. 导入数据2. 设置分词器3. 去除标点和停用词4. 文本迭代器5. 构建词典6. 文本数字化 N3 NLP中的数据集构建1. Dataset2. DataLoader N8 使用…

当代最杰出的思想家姓名学大师颜廷利:当学历与文凭突破了道德底线。。。

在当今社会&#xff0c;文凭和学历被频繁提及&#xff0c;并似乎成为了衡量个人价值的重要尺度。然而&#xff0c;当这些学术凭证超越了道德的底线时&#xff0c;整个社会便开始笼罩在谎言和欺骗的阴影之下。善良与纯真&#xff0c;如同无助的羔羊&#xff0c;在利益的屠刀下黯…

(亲测有效)SpringBoot项目集成腾讯云COS对象存储(1)

目录 一、腾讯云对象存储使用 1、创建Bucket 2、使用web控制台上传和浏览文件 3、创建API秘钥 二、代码对接腾讯云COS&#xff08;以Java为例&#xff09; 1、初始化客户端 2、填写配置文件 3、通用能力类 文件上传 测试 一、腾讯云对象存储使用 1、创建Bucket &am…

通义千问报错“撞脸”OpenAI?

笔者团队一个月前为能够使系统可以支持AI Agent的应用&#xff0c;集成了通义千问的模型接口&#xff0c;特别是集成了其可以通过推理调用外部工具的能力。并录制了相关视频如何无代码DIY一个AI Agent&#xff0c;体验还是非常不错的。 今日为客户进行该能力演示时&#xff0c;…