【微服务】OpenFeign+Sentinel集中处理远程调用异常

news2024/11/25 14:33:19

文章目录

    • 1.微服务基本环境调整
        • 1.对10004模块的application.yml调整
        • 2.启动nacos以及一个消费者两个提供者
        • 3.测试
          • 1.输入http://localhost:8848/nacos/index.html 来查看注册情况
          • 2.浏览器访问 http://localhost:81/member/nacos/consumer/get/1
          • 3.结果
    • 2.使用OpenFeign实现微服务模块间的远程调用
        • 1.消费者的pom.xml,引入OpenFeign和Nacos的服务发现
        • 2.消费者的application.yml(配置nacos服务注册)
        • 3.消费者的启动类(开启nacos的服务发现,以及启动OpenFeign)
        • 4.com/sun/springcloud/service/MemberOpenfeignService.java 编写与远程调用的方法匹配的接口
          • 1.将要远程调用的方法整个复制到这个接口,然后去掉方法体
          • 2.在接口上添加@FeignClient注解,指定远程调用的服务在nacos中的名字
        • 5.编写一个controller进行远程调用
          • 1.创建一个MemberOpenFeignController的controller并将要远程调用的controller上面的注解复制过来(不能改)
          • 2.依赖注入刚才编写的远程调用的接口的动态代理对象
          • 3.将要远程调用的接口再复制过来,按Tab,使用copilot来自动补全远程调用的代码
        • 6.测试
          • 1.启动nacos,81模块,10004,10006模块
          • 2.访问nacos查看注册情况
          • 3.浏览器输入 http://localhost:81/member/openfeign/get/1 (必须加上http:// )
        • 7.切换负载均衡算法
          • 1.编写配置类,注入一个负载均衡算法的bean
          • 2.重新启动,报错,bean已经被定义了,说明之前可能定义了同样id的负载均衡算法的bean
          • 3.换一个id即可,然后重新启动
          • 4.测试,浏览器访问几次,有时会出现超时的情况(OpenFeign默认超时时间为1s)
          • 5.设置超时时间 application.yml
            • 1.全局配置
            • 2.单个Feign客户端配置
          • 6.又检查了一下,远程调用的方法,之前设置了休眠时间,删除即可。。。
    • 3.服务消费者整合Sentinel进行服务保护
        • 1.pom.xml引入Sentinel
        • 2.application.yml 配置Sentinel的客户端和服务端
        • 3.测试
          • 1.启动nacos,sentinel
          • 2.启动81,10004,10006模块
          • 3.浏览器输入http://localhost:8080/ 进入Sentinel的服务端
          • 4.浏览器输入http://192.168.137.1:8848/nacos/index.html进入nacos查看注册情况
          • 5.浏览器访问 http://localhost:81/member/openfeign/get/1 然后查看Sentinel控制台
        • 4.需求分析
        • 5.开始配置之前进行测试
          • 当10004和10006都down掉时,不断请求会发生什么?
            • 1.首先关闭10004和10006微服务
            • 2.浏览器发送请求 http://localhost:81/member/openfeign/get/1,发现是超时
            • 3.浏览器发送请求 http://localhost:81/member/openfeign/get/1, 可以发现服务不可用
        • 6. 81模块配置如果远程调用的服务出现异常,则立即返回结果
          • 1.MemberFeignFallbackService.java 实现 MemberOpenfeignService.java 并注入容器
          • 2.在application.yml配置启用openfeign和sentinel的整合
          • 3.MemberOpenfeignService 添加fallback属性,指定出现异常要处理的类
          • 4.重新启动81模块,浏览器输入 http://localhost:81/member/openfeign/get/1测试
          • 5.关闭10004和10006,再次进行测试,成功处理异常!
    • 4.消费者使用OpenFeign整合Sentinel进行服务保护小结
        • 1.服务消费者OpenFeign远程调用流程
          • 1.配置Nacos的服务发现和服务注册功能
          • 2.配置OpenFeign远程调用
            • 1.pom.xml引入OpenFeign依赖
            • 2.编写service接口存放服务发现和资源路径的信息
            • 3.编写controller进行远程调用
        • 2.整合Sentinel进行服务保护流程
          • 1.配置Sentinel监控服务
          • 2.配置OpenFeign整合Sentinel,使得远程调用出现异常集中处理
        • 3.服务消费者OpenFeign远程调用整合Sentinel进行服务保护原理
        • 4.Sentinel仍然可以对这个controller进行流量控制,熔断降级,热点限流
          • 设置QPS为1
    • 5.规则持久化
        • 1.规则持久化方案
        • 2.规则持久化原理
        • 3.需求分析
        • 4.具体配置
          • 1.在Nacos配置中心增加Sentinel的流控规则
          • 2.pom.xml引入nacos和sentinel持久化的依赖
          • 3.application.yml 拉取Nacos的配置信息并同步到Sentinel
          • 4.测试
            • 1.启动Nacos、Sentinel、81、10004、10006
            • 2.查看Nacos注册情况
            • 3.浏览器快速请求 http://localhost:81/member/openfeign/get/1, 流控规则生效!
            • 4.查看同步到Sentinel的流控规则
        • 5.其他规则配置

1.微服务基本环境调整

1.对10004模块的application.yml调整

image-20240330095841583

2.启动nacos以及一个消费者两个提供者

目前的消费者是Ribbon+restTemplate形式进行远程调用的

image-20240330100101156

image-20240330100754503

3.测试
1.输入http://localhost:8848/nacos/index.html 来查看注册情况

image-20240330101232507

2.浏览器访问 http://localhost:81/member/nacos/consumer/get/1
3.结果

image-20240330101116525

2.使用OpenFeign实现微服务模块间的远程调用

1.消费者的pom.xml,引入OpenFeign和Nacos的服务发现
<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 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.example</groupId>
        <artifactId>e-commerce-center</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <artifactId>member-service-nacos-consumer-81</artifactId>
    <name>Archetype - member-service-nacos-consumer-81</name>
    <url>http://maven.apache.org</url>

    <dependencies>
        <!-- 引入openfeign -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <!--引入nacos的服务发现-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!-- springboot web starter 用来监听端口-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <!-- 如果在子工程/模块指定了 version,则以指定为准 -->
        </dependency>
        <!--
        1. starter-actuator 是 springboot 程序的监控系统,可以实现健康检查,info 信息
        等
        2. 访问 http://localhost:10000/actuator 可以看到相关链接, 还可以做相关设置. -->
        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web
        -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <!-- lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!-- test -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- 公共模块的jar包 -->
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>e_commerce_center-common-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

    </dependencies>
</project>

2.消费者的application.yml(配置nacos服务注册)
server:
  port: 81
spring:
  application:
    name: member-service-nacos-consumer-81
# 配置nacos的服务注册
  cloud:
      nacos:
        discovery:
          server-addr: localhost:8848 # 配置要注册到的nacos地址,根据实际情况填写
3.消费者的启动类(开启nacos的服务发现,以及启动OpenFeign)
package com.sun.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

/**
 * @author 孙显圣
 * @version 1.0
 */
@SpringBootApplication // springboot启动类
@EnableDiscoveryClient // 开启nacos服务发现
@EnableFeignClients // 开启feign远程调用
public class MemberNacosCostomerApplication81 {
    public static void main(String[] args) {
        SpringApplication.run(MemberNacosCostomerApplication81.class, args);
    }
}

4.com/sun/springcloud/service/MemberOpenfeignService.java 编写与远程调用的方法匹配的接口
1.将要远程调用的方法整个复制到这个接口,然后去掉方法体
package com.sun.springcloud.service;

import com.sun.springcloud.util.Result;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

/**
 * Description:
 *
 * @Author sun
 * @Create 2024/3/30 10:39
 * @Version 1.0
 */
public interface MemberOpenfeignService {
    /**
     * 根据id来获取某个会员的信息
     *
     * @param id 使用路径参数的形式传入参数
     * @return 返回json格式的数据
     */
    @GetMapping("/memberget/{id}") // 这里使用的路径参数
    public Result getMemberById(@PathVariable("id") Long id);
}

2.在接口上添加@FeignClient注解,指定远程调用的服务在nacos中的名字
  • 这样这个接口中就具备了所有远程调用微服务的信息
  • 后面在注入的时候就会注入针对这个接口的代理对象,远程调用方法的时候通过@FeignClient注解中的信息进行服务发现ip + 端口 + 上下文路径,并在前面加上http://,最后再拼接上这个@GetMapping注解中的资源路径,完成远程调用
  • 简单来说,这个接口需要包含要远程调用的服务发现和资源路径的信息,这样才能够进行远程调用
package com.sun.springcloud.service;

import com.sun.springcloud.util.Result;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

/**
 * Description:
 *
 * @Author sun
 * @Create 2024/3/30 10:39
 * @Version 1.0
 */
@FeignClient("member-service-nacos-provider") // 会进行服务的发现,发现服务的ip+端口+上下文路径
public interface MemberOpenfeignService {
    /**
     * 根据id来获取某个会员的信息
     *
     * @param id 使用路径参数的形式传入参数
     * @return 返回json格式的数据
     */
    @GetMapping("/member/get/{id}") // 这里使用的路径参数
    public Result getMemberById(@PathVariable("id") Long id);
}

5.编写一个controller进行远程调用
1.创建一个MemberOpenFeignController的controller并将要远程调用的controller上面的注解复制过来(不能改)
package com.sun.springcloud.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RestController;

/**
 * Description:
 *
 * @Author sun
 * @Create 2024/3/30 10:53
 * @Version 1.0
 */
// 这两个注解是要远程调用的controller的注解
@RestController
@Slf4j
public class MemberOpenFeignController {
}

2.依赖注入刚才编写的远程调用的接口的动态代理对象
package com.sun.springcloud.controller;

import com.sun.springcloud.service.MemberOpenfeignService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**
 * Description:
 *
 * @Author sun
 * @Create 2024/3/30 10:53
 * @Version 1.0
 */
// 这两个注解是要远程调用的controller的注解
@RestController
@Slf4j
public class MemberOpenFeignController {
    @Resource
    private MemberOpenfeignService memberOpenFeignService; // 注入远程调用的接口
}

3.将要远程调用的接口再复制过来,按Tab,使用copilot来自动补全远程调用的代码
  • 这里的url,方法名,参数,都是可以修改的
  • 传入getMemberById的参数必须符合这个controller的要求
  • getMemberById的返回类型也要匹配,比如这里就必须使用@RestController
  • 牢记接口三要素 url 参数 返回值
  • 建议:如果只是想要远程调用一下的话,就没必要修改了,直接粘贴过来远程调用即可
package com.sun.springcloud.controller;

import com.sun.springcloud.service.MemberOpenfeignService;
import com.sun.springcloud.util.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**
 * Description:
 *
 * @Author sun
 * @Create 2024/3/30 10:53
 * @Version 1.0
 */
// 这两个注解是要远程调用的controller的注解
@RestController
@Slf4j
public class MemberOpenFeignController {
    @Resource
    private MemberOpenfeignService memberOpenFeignService; // 注入远程调用的接口

    /**
     * 根据id来获取某个会员的信息
     *
     * @param id 使用路径参数的形式传入参数
     * @return 返回json格式的数据
     */
    @GetMapping("/member/openfeign/get/{id}") // 1.这里的url是可以改的
    public Result getMemberById(@PathVariable("id") Long id) { // 2.这里的参数和方法名是可以改的
        // 远程调用member-service-nacos-provider的getMemberById方法
        return memberOpenFeignService.getMemberById(id); // 这里的参数和返回值是要远程调用的接口的参数和返回值
    }
}

6.测试
1.启动nacos,81模块,10004,10006模块

image-20240330112344035

image-20240330112330720

2.访问nacos查看注册情况

image-20240330112448718

3.浏览器输入 http://localhost:81/member/openfeign/get/1 (必须加上http:// )

image-20240330112747460

7.切换负载均衡算法
1.编写配置类,注入一个负载均衡算法的bean
package com.sun.springcloud.config;

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/** 配置类,用于配置Ribbon的负载均衡策略
 * @author 孙显圣
 * @version 1.0
 */
@Configuration
public class RibbonRule {
    @Bean
    public IRule ribbonRule() {
        // 随机策略
        return new RandomRule();
    }
}

2.重新启动,报错,bean已经被定义了,说明之前可能定义了同样id的负载均衡算法的bean

image-20240330131715496

3.换一个id即可,然后重新启动

image-20240330131826535

image-20240330131949790

4.测试,浏览器访问几次,有时会出现超时的情况(OpenFeign默认超时时间为1s)

image-20240330132533574

5.设置超时时间 application.yml
1.全局配置
feign:
  client:
    config:
      default:
        connectTimeout: 5000
        readTimeout: 10000

2.单个Feign客户端配置
feign:
  client:
    config:
      客户端的application-name:
        connectTimeout: 5000
        readTimeout: 10000

6.又检查了一下,远程调用的方法,之前设置了休眠时间,删除即可。。。

image-20240330132831360

3.服务消费者整合Sentinel进行服务保护

1.pom.xml引入Sentinel
        <!-- 引入Sentinel -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
2.application.yml 配置Sentinel的客户端和服务端

image-20240330133818630

      sentinel:
        transport:
          dashboard: localhost:8080 # 配置sentinel服务端的地址,根据实际情况填写  
          port: 8719 # 配置sentinel客户端的端口,根据实际情况填写,如果冲突,会自动+1,直到找到可用的端口
3.测试
1.启动nacos,sentinel

image-20240330134115568

image-20240330134103411

2.启动81,10004,10006模块

image-20240330134142463

3.浏览器输入http://localhost:8080/ 进入Sentinel的服务端

image-20240330134321907

4.浏览器输入http://192.168.137.1:8848/nacos/index.html进入nacos查看注册情况

image-20240330134523803

5.浏览器访问 http://localhost:81/member/openfeign/get/1 然后查看Sentinel控制台

image-20240330135602866

4.需求分析

image-20240330140249918

5.开始配置之前进行测试
当10004和10006都down掉时,不断请求会发生什么?
1.首先关闭10004和10006微服务

image-20240330141042709

2.浏览器发送请求 http://localhost:81/member/openfeign/get/1,发现是超时
  • 原因是OpenFeign会根据接口的信息来通过服务发现和资源路径,找到要远程调用的接口,并缓存在本地,所以只要缓存还在,就不会是服务不可用

image-20240330132533574

3.浏览器发送请求 http://localhost:81/member/openfeign/get/1, 可以发现服务不可用
  • 此时的缓存已经不在,OpenFeign重新从nacos获取服务信息,但是获取不到所以会出现服务不可用的错误

image-20240330141137054

6. 81模块配置如果远程调用的服务出现异常,则立即返回结果

image-20240330144105150

1.MemberFeignFallbackService.java 实现 MemberOpenfeignService.java 并注入容器
package com.sun.springcloud.service;

import com.sun.springcloud.util.Result;
import org.springframework.stereotype.Component;

/**
 * Description: 会员服务的降级处理, 当服务不可用时,立即返回一个默认的结果
 *
 * @Author sun
 * @Create 2024/3/30 14:32
 * @Version 1.0
 */
@Component // 注入到spring容器中
public class MemberFeignFallbackService implements MemberOpenfeignService{
    @Override
    public Result getMemberById(Long id) {
        return Result.error("503", "服务降级返回, 服务不可用");
    }
}

2.在application.yml配置启用openfeign和sentinel的整合

image-20240330144151786

# 配置openfeign和sentinel的整合          
feign:
  sentinel:
    enabled: true
3.MemberOpenfeignService 添加fallback属性,指定出现异常要处理的类

image-20240330145014987

4.重新启动81模块,浏览器输入 http://localhost:81/member/openfeign/get/1测试

image-20240330144529901

5.关闭10004和10006,再次进行测试,成功处理异常!

image-20240330145207537

4.消费者使用OpenFeign整合Sentinel进行服务保护小结

1.服务消费者OpenFeign远程调用流程
1.配置Nacos的服务发现和服务注册功能
  • 服务发现:配置pom.xml,和启动类开启服务发现的注解
  • 服务注册:配置application.yml
2.配置OpenFeign远程调用
1.pom.xml引入OpenFeign依赖
2.编写service接口存放服务发现和资源路径的信息
  • 将要远程调用的方法整个复制到这个接口,然后去掉方法体
  • 在接口上添加@FeignClient注解,指定远程调用的服务在nacos中的名字
3.编写controller进行远程调用
  • 将要远程调用的controller上面的注解复制过来(不能改)
  • 依赖注入刚才编写的远程调用的接口的动态代理对象
  • 将要远程调用的接口再复制过来去掉方法体,按Tab,使用copilot来自动补全远程调用的代码
2.整合Sentinel进行服务保护流程
1.配置Sentinel监控服务
  • pom.xml引入Sentinel依赖
  • application.yml 配置Sentinel的客户端和服务端
2.配置OpenFeign整合Sentinel,使得远程调用出现异常集中处理
  • 编写一个类实现存放服务发现和资源路径的信息的service,并实现其方法,然后注入容器
  • 在application.yml配置启用openfeign和sentinel的整合
  • 在service中的@FeignClient注解,添加fallback属性,指定出现处理异常的类
3.服务消费者OpenFeign远程调用整合Sentinel进行服务保护原理

image-20240330153347387

4.Sentinel仍然可以对这个controller进行流量控制,熔断降级,热点限流
设置QPS为1

image-20240330150307503

5.规则持久化

1.规则持久化方案

image-20240330160104138

2.规则持久化原理
  • 简单来说就是在Nacos配置Sentinel的规则
  • 然后在通过Sentinel监控的微服务通过底层通信,同步到Sentinel上

image-20240330160929985

3.需求分析

image-20240330161414714

4.具体配置
1.在Nacos配置中心增加Sentinel的流控规则

image-20240330164518209

2.pom.xml引入nacos和sentinel持久化的依赖
        <!-- 引入nacos和sentinel持久化的依赖 -->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-nacos</artifactId>
        </dependency>
3.application.yml 拉取Nacos的配置信息并同步到Sentinel

image-20240330165648937

        datasource:
          ds1: # 从Nacos中读取sentinel的规则配置
            nacos:
              server-addr: localhost:8848 # 配置要注册到的nacos地址,根据实际情况填写
              dataId: member-service-nacos-consumer-81 # 配置要读取的配置的dataId
              groupId: DEFAULT_GROUP # 配置要读取的配置的groupId
              data-type: json # 配置要读取的配置的类型
              rule-type: flow # 配置要读取的配置的规则类型为流控规则
4.测试
1.启动Nacos、Sentinel、81、10004、10006
2.查看Nacos注册情况

image-20240330165957732

3.浏览器快速请求 http://localhost:81/member/openfeign/get/1, 流控规则生效!

image-20240330170121418

4.查看同步到Sentinel的流控规则

image-20240330170241130

5.其他规则配置

官方文档

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

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

相关文章

wpsword求和操作教程

wpsword求和怎么操作&#xff1a; 1、首先&#xff0c;单纯的数据是无法求和的&#xff0c;所以我们必须要“插入”一个“表格” 2、接着将需要求和的数据填入到表格中。 3、填完后&#xff0c;进入“布局”选项卡。 4、然后打开其中的“公式” 5、在其中选择求和公式“SUM”并…

【C语言】Infiniband驱动mlx4_reset

一、注释 这个 mlx4_reset 函数负责重置 Mellanox 设备。它保存了设备的 PCI 头信息&#xff0c;然后重置了设备&#xff0c;之后还原保存的 PCI 头信息。请注意&#xff0c;该函数是用英文注释的&#xff0c;下面提供中文注释的版本。以下是该函数的流程&#xff1a; 1. 为保…

制造出海,灵途科技助力割草机器人、泳池清洁机器人全方位感知

近年来&#xff0c;越来越多的中国企业开始对外开拓&#xff0c;走向海外市场、挖掘和满足全球消费者的需求。在消费机器人领域&#xff0c;中国企业出海成绩亮眼&#xff01;在2024 ces 和上海AWE展会上&#xff0c;多家机器人公司展示了家用智能割草机器人、泳池清洁机器人的…

vue2 el-table指定某些数据不参与排序

vue2 el-table指定某些数据不参与排序 1、需求描述2、配置属性方法3、详细代码如下 1、需求描述 最后一行总计不参与排序 2、配置属性方法 el-table 需要配置 sort-change"soltHandle" 方法 el-table-column 需要配置 sortable"custom"属性3、详细代码如…

牛客周赛 Round 38(A,B,C,D,E,F,G)

比赛链接 官方讲解&#xff08;不分P不分段直接两小时怼上来是坏文明 &#xff09; 这场的题很棒&#xff0c;思维有难度&#xff0c;考察的知识点广泛&#xff0c;有深度&#xff0c;很透彻。感觉学到了很多。建议补题。 A 小红的正整数自增 思路&#xff1a; 签到。 可以…

uniapp开发微信小程序分包问题

现象 当我们开发完成小程序后&#xff0c;上传时&#xff0c;出现上传失败&#xff0c;此时就需要我们进行分包处理。 1.未分包之前 我们可以点击本地代码&#xff0c;进行查看 可以看到都是主包&#xff0c;表示没有进行分包处理。 2.在HBuilder X中点击源码视图 3.在mp-we…

rabbitMQ版本问题与下载

都到现在了&#xff0c;大家不会安装东西还是不看版本吧 云服务器买的是centos7&#xff0c;而erlang在24版本后不支持centos7了 所以需要找24版本以下的erlang&#xff0c;而不同erlang对应不同rabbitmq所以需要对应 下载erlang 说实话&#xff0c;自己安装&#xff0c;还是…

机器学习 - 创建多类别的数据

可以用到 scilit-learn 里的 make_blobs() 方法。这个方法用于生成聚类数据集&#xff0c;也用于测试和调试聚类算法。 import torch import matplotlib.pyplot as plt from sklearn.datasets import make_blobs from sklearn.model_selection import train_test_split NUM…

Mybatis-特殊SQL的执行

1. 模糊查询 在MyBatis中进行模糊查询时&#xff0c;有以下三种常见的实现方式&#xff1a; 1.1. 错误示范 先来个准备操作&#xff0c;并做一个错误示例 根据姓名&#xff0c;模糊查询用户&#xff0c;(x小x) 更新数据表 SQLMapper.java package com.sakurapaid.mybatis3…

pytest--python的一种测试框架--pytest初阶

前言 使用pytest去做测试时我们对文件名的命名其实是有规范的&#xff0c;要用test_开头&#xff01;&#xff01;&#xff01; 一、pytest初阶 def test_one():expect1actual1assert expectactual#测试专用语句&#xff1a;assert&#xff0c;识别期望与实际值是否相等这个…

Vue系列-el挂载

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>el:挂载点</title> </head> <body&g…

Mac上Matlab_R2023b ARM 版 启动闪退(意外退出)解决方法

安装好后&#xff0c;使用 "libmwlmgrimpl.dylib" 文件替换掉"/Applications/Matlab_R2023b.app/bin/maca64/matlab_startup_plugins/lmgrimpl"文件夹下的同名文件 在终端下执行如下命令&#xff1a; codesign --verbose --force --deep -s - /Applicat…

npm淘宝镜像源更新

目录 前情提要&#xff1a; 背景&#xff1a; 镜像源更新&#xff1a; 清楚缓存&#xff1a; 直接切换镜像源&#xff1a; 注&#xff1a;npm 补充&#xff1a; 错误解释&#xff1a; 解决方法&#xff1a; 前情提要&#xff1a; 2024 /1 /22 &#xff0c;registry.npm…

Python面对对象 - 类的反射机制

Python面对对象类的反射机制是面向对象编程语言中比较重要的功能&#xff0c;可以动态获取对象信息以及动态调用对象。通过字符串形式的类名或属性来访问对应类或属性。 一、对象的反射 1. getattr 获取指定字符串名称的对象属性、方法&#xff1a; 当访问的属性不存在时&#…

IPv6-重定向,PMTU,GRE隧道

IPv6-重定向&#xff0c;PMTU&#xff08;路径最大传输单元&#xff09;&#xff0c;GRE隧道&#xff08;Generic Routing Encapsulation&#xff0c;通用路由封装协议&#xff09; 重定向过程 触发重定向的条件&#xff1a; 1、报文的入接口&#xff0c;等于自身路由之后的…

深入理解SQLite:存储引擎、索引、事务与锁

文章目录 一、存储引擎二、索引的数据结构和类型2.1 B-Tree2.2 其他类型的索引2.3 小结 三、事务处理中的一致性问题3.1 脏读&#xff08;Dirty Read&#xff09;3.2 不可重复读&#xff08;Non-repeatable Read&#xff09;3.3 幻读&#xff08;Phantom Read&#xff09;3.4 小…

RVM安装Ruby笔记(Mac)

环境 硬件&#xff1a;Macbook Pro 系统&#xff1a;macOS 14.1 安装公钥 通过gpg安装公钥失败&#xff0c;报错如下&#xff1a; 换了几个公钥地址&#xff08;hkp://subkeys.pgp.net&#xff0c;hkp://keys.gnupg.net&#xff0c;hkp://pgp.mit.edu&#xff09;&#xff0c;…

mac怎么删除python

mac 默认安装了python2&#xff1b;自己后面又安装了python3&#xff1b;为了方便&#xff0c;现在想将python3换成Anaconda3。 Anaconda是一个开源的Python发行版本&#xff0c;其包含了conda、Python等180多个科学包及其依赖项。 Python3安装之后&#xff0c;在系统中不同目…

记录el-table的表格合并问题

项目需求背景&#xff1a; 利用el-table进行数据展示时&#xff0c;时常会有需要表格合并的情景&#xff0c;比如一个表格由5列组成&#xff1a; 类型 地区 金额 重量 长度 在这个表格里&#xff0c;如果同金额、重量的列可以合并到一起&#xff0c;这时应该怎么做呢&#xff1…

神经网络与深度学习(一)

线性回归 定义 利用数理统计中回归分析&#xff0c;来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法 要素 训练集&#xff08;训练数据&#xff09;输出数据拟合函数数据条目数 场景 预测价格&#xff08;房屋、股票等&#xff09;、预测住院时间&#…